user234830 Asked:2020-01-24 02:53:50 +0000 UTC2020-01-24 02:53:50 +0000 UTC 2020-01-24 02:53:50 +0000 UTC 文字如何存储在内存中? 772 文字如何存储在内存中? int main() { 5; 1.; ""; } c++ 3 个回答 Voted Best Answer AnT stands with Russia 2020-01-24T03:23:21Z2020-01-24T03:23:21Z 从抽象的“内存中”的角度来看, C++语言中只存储左值。在您列出的文字中,只有字符串文字""是左值,即 只有它存储在内存中。 其余文字不是左值,并且形式上没有内存位置。 事实上,整型字面值通常“嵌入”在使用它们的上下文中。它们可以直接构建到生成的机器指令中(即成为代码的一部分,而不是程序数据),或者它们可以在这种情况下完全转换或完全溶解:乘以 8 可以替换为移位到留3位,给变量赋0值可以用零机器指令代替。 浮点文字会发生什么取决于编译器的功能和底层机器平台的细节。在x86平台上,一般情况下,确实会在内存中存储一个浮动字面量,即 将创建一个内部变量来存储它。同时,编译器可以自由识别“特殊”浮动常量(0.0等1.0)并隐式实现它们。但是,无论如何,在语言层面上,浮动文字没有内存位置。 Vlad from Moscow 2020-01-24T03:08:49Z2020-01-24T03:08:49Z 算术文字不存储在内存中,而是嵌入在目标代码中。字符串文字通常存储在单独的文字池中,因为它们具有静态内存持续时间。根据编译器选项,相同的字符串文字可以存储为单个文字或单独的文字。 因此,if 子句中给定的表达式 if ( "A" == "A" ) { /* ... */ } true如果这两个文字存储为一个文字,即它们具有相同的地址,并且false如果编译器将这些文字中的每一个存储在单独的内存位置,则它们都可以有一个值。 关于这个项目 int main() { 5; 1.; ""; } 因为这些表达式子句没有副作用,所以根本不会为它们生成目标代码。 Harry 2020-01-24T02:57:04Z2020-01-24T02:57:04Z 没办法......虽然它们不被使用 - 例如,初始化一个变量,或者在函数调用中。然后它们可能不会被存储——例如,有些会a >>= 2简单地变成一条机器指令,其中只指示立即数 2,没有任何存储。
从抽象的“内存中”的角度来看, C++语言中只存储左值。在您列出的文字中,只有字符串文字
""是左值,即 只有它存储在内存中。其余文字不是左值,并且形式上没有内存位置。
事实上,整型字面值通常“嵌入”在使用它们的上下文中。它们可以直接构建到生成的机器指令中(即成为代码的一部分,而不是程序数据),或者它们可以在这种情况下完全转换或完全溶解:乘以 8 可以替换为移位到留3位,给变量赋0值可以用零机器指令代替。
浮点文字会发生什么取决于编译器的功能和底层机器平台的细节。在x86平台上,一般情况下,确实会在内存中存储一个浮动字面量,即 将创建一个内部变量来存储它。同时,编译器可以自由识别“特殊”浮动常量(
0.0等1.0)并隐式实现它们。但是,无论如何,在语言层面上,浮动文字没有内存位置。算术文字不存储在内存中,而是嵌入在目标代码中。字符串文字通常存储在单独的文字池中,因为它们具有静态内存持续时间。根据编译器选项,相同的字符串文字可以存储为单个文字或单独的文字。
因此,if 子句中给定的表达式
true如果这两个文字存储为一个文字,即它们具有相同的地址,并且false如果编译器将这些文字中的每一个存储在单独的内存位置,则它们都可以有一个值。关于这个项目
因为这些表达式子句没有副作用,所以根本不会为它们生成目标代码。
没办法......虽然它们不被使用 - 例如,初始化一个变量,或者在函数调用中。然后它们可能不会被存储——例如,有些会
a >>= 2简单地变成一条机器指令,其中只指示立即数 2,没有任何存储。