为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C++
慕妹3242003 2019-05-30 13:38:55
字符串文字:它们去哪里了?我感兴趣的是字符串文本的分配/存储位置。我确实找到了一个有趣的答案这里,说:定义一个字符串内联实际上嵌入了程序本身的数据,并且不能被更改(一些编译器通过一个聪明的技巧允许这样做,不要费心)。但是,它与C+有关,更不用说它说不用麻烦了。我在烦你。=D所以我的问题是我的字符串文字在哪里以及如何保存?我为什么不试着改变它呢?实现是否因平台而异?有人愿意详细介绍一下“聪明的把戏”吗?
查看完整描述

4 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

一种常见的技术是将字符串文本放入“只读数据”部分,将其映射到进程空间作为只读(这就是为什么不能更改它)。

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

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

char foo[] = "...";

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


查看完整回答
反对 回复 2019-05-30
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这个问题没有一个答案。C和C+标准只是说字符串文本具有静态存储时间,任何修改字符串的尝试都会产生未定义的行为,具有相同内容的多个字符串文本可能共享也可能不共享相同的存储。

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

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


查看完整回答
反对 回复 2019-05-30
?
达令说

TA贡献1821条经验 获得超6个赞

FYI,只是备份其他答案:

标准:ISO/IEC 14882:2003说:

2.13.字符串文字

  1. [.]普通字符串的类型为“数组”n const char“和静态储存时间(3.7)

  2. 是否所有字符串文本都是不同的(也就是说,存储在不重叠的对象中)是实现定义的。试图修改字符串文字的效果未定义。


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 499 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信