【发布时间】:2011-10-30 06:41:18
【问题描述】:
有时我们在 c 编程中使用这种类型的代码。
char *p = "Sam";
这里将把常量字符串“Sam”的地址存储在char指针p中。现在在这里
我想问一下山姆要存放在哪里?
【问题讨论】:
-
@BrianRoach 字符串文字不是常量变量。
标签: c
有时我们在 c 编程中使用这种类型的代码。
char *p = "Sam";
这里将把常量字符串“Sam”的地址存储在char指针p中。现在在这里
我想问一下山姆要存放在哪里?
【问题讨论】:
标签: c
标准没有规定这一点。通常,字符串文字 ("Sam") 将存储在数据部分的只读页面中。
至于p本身,就看是自动的还是静态的了。
【讨论】:
data(或者可能是bss)中。
data 部分有只读页面?在 Linux/ELF 上,字符串文字与其他只读非代码数据一起存储在 rodata 部分中,该部分与 text 位于同一段中。
.text 和 .rodata 部分通常共享一个 PT_LOAD 程序头,请参阅readelf -l) 的输出。
字符串“Sam”通常与全局常量存储在全局内存中的同一区域中。
但是,如果您这样做:
char p[] = "Sam";
然后它会在堆栈上。 (作为数组初始化器)
【讨论】: