(c/c ++)字符串文字的副本在TEXT部分共享内存吗?

Nao*_*aor 1 c c++ string-literals

如果我调用像myObj.setType("fluid")这样的函数; 在一个程序中,很多次,文字"流体"的副本被保存在内存中?编译器是否可以识别此文字已经定义并再次引用它?

Ara*_*raK 15

这与C++(语言)无关.相反,它是编译器可以执行的"优化".所以,答案,取决于您使用的编译器/平台.

@David这是来自该语言最新草稿:

§2.14.6(第28页)

是否所有字符串文字都是不同的(即存储在非重叠对象中)是 实现定义的.尝试修改字符串文字的效果是未定义的.

重点是我的.

换句话说,C++中的字符串文字是不可变的,因为修改字符串文字是未定义的行为.因此,编译器是免费的,以消除冗余副本.

顺便说一下,我只谈论C++;)


Stu*_*Stu 6

是的,它可以.当然,这取决于编译器.对于VC++,它甚至可以配置:

http://msdn.microsoft.com/en-us/library/s0s0asdt(VS.80).aspx