2009-01-25 81 views

回答

9

數組本身將在堆棧中。在函數入口處會有一些代碼將存儲在全局/靜態存儲區域中某個未命名數組中的值複製到堆棧的本地數組中。很可能具有初始值的未命名全局/靜態數組與字符串文本位於相同的通用內存區域中。

但是請注意,這些標準都不需要這些 - 但幾乎任何編譯器都會實現它。一個足夠智能的編譯器可能會注意到這些值只是遞增的整數值,並可能創建一個循環來初始化本地數組,

(這個答案假定C/C++ - 我不知道Objective-C是否會改變任何這個的)。

1

正如Micheal所說,初始化程序列表的值將被存儲在哪裏取決於編譯器和優化級別。例如,沒有優化的gcc只會生成將常量移動到數組中相應位置的代碼,即實際值只會存儲在代碼本身中。如果你不編譯目標代碼,你可以很容易地檢查會發生什麼,但是讓你的編譯器輸出彙編代碼。

-1

如果有人閱讀這篇文章是爲了看C#,答案是不同的。數組是引用類型,所以這些值存儲在堆中並在堆棧中引用。

+0

這個問題關於C.它與C#無關。 – 2010-11-05 18:32:43