[英]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的實際大小存儲在內存中的單獨隱藏位置來為其提供“啟用技術”。
看看這個特殊情況的標准說明:
sizeof
運算符產生其操作數的大小(以字節為單位),該操作數可以是表達式或類型的帶括號的名稱。 大小由操作數的類型確定。 結果是整數。 如果操作數的類型是可變長度數組類型,則計算操作數 ; 否則,不評估操作數,結果是整數常量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.