簡體   English   中英

具有由C中的變量定義的長度的數組如何存儲在內存中?

[英]How do arrays with length defined by variables in C get stored in memory?

我試過很多次搜索。 靜態數組通常存儲在堆棧中,並且在編譯期間確定它們的大小。 例如:

int main()
{
    int n;
    scanf("%d", &n);
    int array[n];
    printf("%u", sizeof(array));
    return 0;
}

對於不同的n值,數組的大小會發生變化。 因此,這里的數組不應該存儲在堆中,因為大小是在運行時確定的嗎? 一直對此感到困惑。 請幫忙。 謝謝!

這里的數組不應該存儲在堆中,因為大小是在運行時確定的嗎?

可以 ,但它不是唯一的方法。 C編譯器非常智能,可以將自動內存(通常稱為“堆棧”)中此可變長度數組的內存分配推遲到代碼中已知數組大小的點。

為了實現這一點,需要創建sizeof的相關技巧。 通常, sizeof在編譯時進行評估; 但是,可變長度數組改變了這一點,要求在運行時評估VLA上的sizeof表達式。 同樣,編譯器通過將VLA的實際大小存儲在內存中的單獨隱藏位置來為其提供“啟用技術”。

看看這個特殊情況的標准說明:

C11:6.5.3.4(第2頁):

sizeof運算符產生其操作數的大小(以字節為單位),該操作數可以是表達式或類型的帶括號的名稱。 大小由操作數的類型確定。 結果是整數。 如果操作數的類型是可變長度數組類型,則計算操作數 ; 否則,不評估操作數,結果是整數常量。

暫無
暫無

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

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