2011-10-30 162 views
7

有时我们在我们的c编程中使用这种类型的代码。常量字符串将存储在内存中的位置?

char *p = "Sam"; 

这里常量字符串“Sam”的地址将被存储在char指针p中。现在在这里
我想问一下Sam将要存储在哪里?

+0

可能的重复[哪里是存储在C中的常量变量?](http://stackoverflow.com/questions/1576489/where-are-constant-variables-stored-in-c) –

+0

@BrianRoach字符串文字不是一个常量变量。 –

回答

9

标准没有规定这一点。通常,字符串文字("Sam")将存储在数据部分中的只读页面中。

至于p本身,它取决于它是自动的还是静态的。

+0

哪里存储自动和全局? –

+2

@ Mr.32自动变量存储在堆栈中。 “全局”或静态变量存储在“数据”(或可能是“bss”)中。 – cnicutar

+1

哪个体系结构在'data'部分有只读页面?在Linux/ELF上,字符串文字会与'rodata'节中的其他只读非代码数据一起存储,'rodata'节与text'相同。 –

8

字符串“Sam”通常会存储在与全局常量相同的区域的全局内存中。

但是,如果你这样做:

char p[] = "Sam"; 

然后,它会在堆栈上,而不是。 (作为一个数组初始值设定)

相关问题