簡體   English   中英

存儲初始化列表初始化的數組在哪里?

[英]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};
}

數組的值存儲在哪里?

  • 堆?
  • 堆?
  • 連同那些字符串文字。 (它被稱為高頻堆嗎?)
  • 別的地方?

我問,因為我對這個問題不確定:

在objective-c中創建一個整數屬性數組

數組本身將在堆棧中。 進入函數時會有一些代碼將存儲在全局/靜態存儲區中某些未命名數組中的值復制到堆棧上的本地數組中。 具有初始值的未命名全局/靜態數組可能與字符串文字位於相同的一般內存區域中。

但請注意,標准不需要這樣做 - 但它幾乎是任何編譯器實現它的方式。 一個足夠聰明的編譯器可能會注意到這些值只是遞增的整數值,可能會產生一個循環來初始化本地數組,

(這個答案假設C / C ++ - 我不知道Objective-C是否會改變這一點)。

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

如果有人在閱讀這篇文章時正在考慮使用C#,那么答案就不同了。 數組是引用類型,因此值存儲在堆上並在堆棧上引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM