尖括号为Const Char
以下代码指向只读内存中可用的char数组中的第一个字符 。 是对的吗?:
const char * ptr = "String one";
现在当ptr
开始指向另一个内存位置时:
ptr = "String two";
第一个char数组会发生什么? 执行结束时是否释放了该内存位置?
该标准仅表示字符串文字具有静态存储持续时间 ,这意味着变量的生命周期直到程序结束并且在程序启动时初始化。 C11标准草案的相关部分是6.4.5
第6段:
[…]然后使用多字节字符序列初始化静态存储持续时间和长度的数组,该数组足以包含序列。 […]
它可能在只读存储器中,可能只是实现定义。 它不需要被释放,只有通过malloc
动态分配的malloc
需要后续的free
调用。
如果我使用这个程序:
int main() { const char * ptr = "String one"; return 0; }
然后用gcc
构建它然后使用objdump
:
objdump -s -j .rodata a.out
我们会发现在这种情况下它确实存储在只读数据部分:
Contents of section .rodata: 400580 01000200 53747269 6e67206f 6e6500 ....String one.
你可以在这里自己运行