答案稍微有點實施敏感,但總的來說沒有。您的g_glbarr
確實是指向char
或指定地址的指針。字符串本身將被放入帶有常量字符串的數據部分,並且g_glbarr
將在編譯時成爲字符串地址的符號。您最終不會爲指針分配空間,編譯器只是在鏈接時解析地址。
更新
@Jay,這是八九不離十有點兒相同。整數(通常)只是內聯:編譯器會盡可能地將常量放在代碼中,因爲這是一個常見的情況,大多數常規體系結構都可以直接從直接數據中完成。字符串常量將仍然在某些只讀數據部分。所以,當你做出這樣的:
// warning: I haven't compiled this and wouldn't normally
// do it quite this way so I'm not positive this is
// completely grammatical C
struct X {int a; char * b; } x = { 1, "Hello" } ;
的1
變成了「立竿見影」的數據,該"Hello"
在只讀數據分配的地方,編譯器將只產生一些分配了一塊可讀寫數據的看起來像
x:
x.a: WORD 1
x.b WORD @STR42
其中STR42
是在內存中的串"Hello"
的位置的符號名。然後當所有東西都鏈接在一起時,@STR42
被內存中字符串的實際虛擬地址替換。
字符串**可**被刪除**如果**它實際上並未在任何地方使用。 – 2010-12-04 08:44:15
字符串文字只是一個例子。可能有很多這樣的全局變量,它們可能是結構數組,可能會使用字符串,整數等進行初始化。使用malloc爲這些全局變量分配內存會減小任何大小嗎? – Jay 2010-12-04 08:52:31