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