当前位置:  开发笔记 > 编程语言 > 正文

是在静态内存中创建的c ++中的字符串文字吗?

如何解决《是在静态内存中创建的c++中的字符串文字吗?》经验,为你挑选了2个好方法。

c ++中的字符串文字是在静态内存中创建的,只有在程序退出时才会被销毁?



1> James Hopkin..:

是的,字符串文字在程序的整个持续时间内都有效,即使在破坏静态对象期间也是如此.

标准中的2.13.4/1表示

普通的字符串文字具有类型"n const char数组"和静态存储持续时间.

该标准称3.7.1/1中的"静态存储持续时间":

这些对象的存储应持续该程序的持续时间.



2> paxdiablo..:

它创建的地方是编译器编写者的实现决策,真的.最有可能的是,字符串文字将存储在只读的内存段中,因为它们永远不会更改.

在旧的编译器时代,您曾经拥有像这些文字这样的静态数据,以及全局但可变的数据.这些存储在TEXT(代码)段和DATA(初始化数据)段中.

即使你有类似char *x = "hello";的代码,hello字符串本身也存储在只读内存中,而变量x在堆栈上(或者在可写内存中的其他位置,如果它是全局的).x只是设置为hello字符串的地址.这允许各种棘手的事情,如字符串折叠,因此"无效选项"(0x1000)和"有效选项"(0x1002)可以使用相同的内存块,如下所示:

+-> plus:0   1   2   3   4   5   6   7   8   9   A   B   C   D   E
|      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
0x1000 | i | n | v | a | l | i | d |   | o | p | t | i | o | n | \0 |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+

请记住,我并不是指ROM中的只读内存,只是专用于存储不可更改内容的内存(可能被操作系统标记为真正只读).

它们在main()出口之前也永远不会被摧毁.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有