字符串文字:它们去哪里了?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我对字符串文字被分配/存储的地方感兴趣。

定义一个内联字符串实际上将数据嵌入到程序本身中,并且不能被改变(一些编译器允许通过聪明的技巧来做到这一点,不要打扰)。

提问于
用户回答回答于

一种常见的技术是将字符串文字置于“只读数据”部分,该部分以只读方式映射到进程空间(这就是为什么你无法更改它)。

它确实因平台而异。例如,更简单的芯片架构可能不支持只读存储器段,因此数据段将是可写的。

相反,然后尝试找出一个技巧,使字符串文字可变(它将高度依赖于你的平台,并可能随时间而改变),只需使用数组:

char foo[] = "...";

编译器将安排数组从文字初始化,你可以修改数组。

用户回答回答于

没有人回答这个问题。C和C ++标准只是说字符串文字具有静态存储持续时间,任何修改它们的尝试都会导致未定义的行为,而具有相同内容的多个字符串文字可能共享或不共享相同的存储。

根据你要编写的系统以及它使用的可执行文件格式的功能,它们可能会随程序代码一起存储在文本段中,或者它们可能具有用于初始化数据的单独段。

确定细节也会因平台而异 - 最有可能包括可以告诉你它放在哪里的工具。如果你想要的话,有些甚至会让你控制这样的细节(例如gnu ld允许你提供一个脚本来告诉它如何分组数据,代码等等)

扫码关注云+社区