2011-10-30 52 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"; 

然後,它會在堆棧上,而不是。 (作爲一個數組初始值設定)

相關問題