文字:他们会占用记忆吗?

时间:2011-11-24 18:14:25

标签: c++ memory literals

一个:

4;
4.0f;
"text";

B:

4.0/5.3;
1.0f*2.3f+3.5f;
"super" + "man";

问题

1)此代码是否会占用内存?

2)b中的代码是否占用了比?

中的代码更多的内存

3)任何人都可以详细解释内部发生的事情吗?

编辑: “超级”+“男人”是一个不好的例子,它首先是不正确的。 (感谢Michael Krelin) 其次,在示例中添加字符串是一个坏主意。

4 个答案:

答案 0 :(得分:3)

这取决于编译器,计算机的架构等。

如果可以确保结果始终相同,编译器很可能在编译时计算这些表达式的值。然后可以将表达式的结果直接放入输出文件中,而不是计算结果所需的指令。但据我所知,编译器不需要执行这些类型的优化。

如果在编译时计算表达式,则运行时的性能与直接在源代码中编写结果的性能相同。

答案 1 :(得分:2)

  

1)此代码是否会占用内存?

  

2)b中的代码是否占用了比?

中的代码更多的内存

取决于编译器产生的机器代码。可能它确实如此。

  

3)任何人都可以详细解释内部发生的事情吗?

了解code segmentdata segment

答案 2 :(得分:2)

所有数值表达式都在编译时进行评估,如Mark所述。然后数字文字变为immediate arguments。但是,对于问题的其他部分,字符串文字会占用内存。通常它们存储在存储器的只读部分中。

答案 3 :(得分:1)

  1. 这不是代码,但如果它在代码中使用,则应将其置于某处
  2. 不,它在编译时进行了评估,除了"super" + "man"这是完全错误的,它应该在编译时连接"super" "man"。而“超人”比“文本”更重要。 “4”(整数)也可能小于“4.0 / 5.3”(浮点数)。
  3. 内部编译器评估常量表达式并将它们放在某处。其余的取决于你所说的“记忆”。它位于程序的地址空间中。