3 回答
TA贡献1780条经验 获得超1个赞
创建它的地方是编译器编写器的实现决定,真的。最有可能的是,字符串文本将存储在内存的只读段中,因为它们从不更改。
在过去的编译器时代,您曾经拥有像这些文字一样的静态数据,以及全局但可变的数据。这些数据存储在文本(代码)段和数据(初始化数据)段中。
即使你有这样的代码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 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
记住,我并不是指只读存储器,而是专用于存储不可更改的东西的内存(操作系统可能会将其标记为只读)。
它们也从未被摧毁,直到main()出口。
TA贡献1813条经验 获得超2个赞
一个普通的字符串文字具有类型为“数组的n个字符”和静态存储时间。
这些对象的存储应在程序期间持续。
TA贡献1864条经验 获得超2个赞
- 3 回答
- 0 关注
- 370 浏览
添加回答
举报