鑑於這一段代碼:存儲初始化器列表初始化的數組存儲在哪裏?
(void)someFunction(void) {
int array[] = {1,2,3,4,5,6,7,8,9,10};
}
哪裏數組的值?
- Stack?
- 堆?
- 連同這些字符串文字。 (是否稱爲高頻堆?)
- 其他地方?
我這麼問是因爲我不能確定對於這個問題:
Create an array of integers property in objective-c
鑑於這一段代碼:存儲初始化器列表初始化的數組存儲在哪裏?
(void)someFunction(void) {
int array[] = {1,2,3,4,5,6,7,8,9,10};
}
哪裏數組的值?
我這麼問是因爲我不能確定對於這個問題:
Create an array of integers property in objective-c
數組本身將在堆棧中。在函數入口處會有一些代碼將存儲在全局/靜態存儲區域中某個未命名數組中的值複製到堆棧的本地數組中。很可能具有初始值的未命名全局/靜態數組與字符串文本位於相同的通用內存區域中。
但是請注意,這些標準都不需要這些 - 但幾乎任何編譯器都會實現它。一個足夠智能的編譯器可能會注意到這些值只是遞增的整數值,並可能創建一個循環來初始化本地數組,
(這個答案假定C/C++ - 我不知道Objective-C是否會改變任何這個的)。
正如Micheal所說,初始化程序列表的值將被存儲在哪裏取決於編譯器和優化級別。例如,沒有優化的gcc只會生成將常量移動到數組中相應位置的代碼,即實際值只會存儲在代碼本身中。如果你不編譯目標代碼,你可以很容易地檢查會發生什麼,但是讓你的編譯器輸出彙編代碼。
如果有人閱讀這篇文章是爲了看C#,答案是不同的。數組是引用類型,所以這些值存儲在堆中並在堆棧中引用。
這個問題關於C.它與C#無關。 – 2010-11-05 18:32:43