[英]where are the variable stored that are initialized in main function in c?
[英]Where is an array initialized by an initializer list stored?
鑒於這段代碼:
(void)someFunction(void) {
int array[] = {1,2,3,4,5,6,7,8,9,10};
}
數組的值存儲在哪里?
我問,因為我對這個問題不確定:
數組本身將在堆棧中。 進入函數時會有一些代碼將存儲在全局/靜態存儲區中某些未命名數組中的值復制到堆棧上的本地數組中。 具有初始值的未命名全局/靜態數組可能與字符串文字位於相同的一般內存區域中。
但請注意,標准不需要這樣做 - 但它幾乎是任何編譯器實現它的方式。 一個足夠聰明的編譯器可能會注意到這些值只是遞增的整數值,可能會產生一個循環來初始化本地數組,
(這個答案假設C / C ++ - 我不知道Objective-C是否會改變這一點)。
正如Micheal所說,初始化列表的值將存儲在哪里取決於編譯器和優化級別。 例如,沒有優化的gcc將生成代碼以將常量移動到數組中的適當位置,即實際值將僅存儲在代碼本身中。 如果不編譯到目標代碼,可以很容易地檢查會發生什么,但是讓編譯器輸出匯編程序。
如果有人在閱讀這篇文章時正在考慮使用C#,那么答案就不同了。 數組是引用類型,因此值存儲在堆上並在堆棧上引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.