[英]I'm little bit confused that whether automatic memory allocation takes place during run time or compile time
我知道內存是在編譯時分配給int a;
等自動變量int a;
和存儲在堆棧中,但如果是可變數組,其輸入來自用戶,例如
#include<stdio.h>
main()
{
int n;
printf("enter the size of array");
scanf("%d",&n);
int a[n];
.......
}
在運行時分配內存。 所以我的問題是,自動分配是否取決於大小寫。 謝謝
在您的示例中,不清楚在何處定義“ a”。 因此,我將通過對此進行假設來回答這個問題。
處理自動分配的代碼在編譯時創建。 實際分配在運行時進行。 您將擁有機器代碼,例如“堆棧上的推入變量”或“在寄存器中放入變量”,但是在執行程序之前,該代碼當然不會做任何事情。 所有堆棧分配均在運行時完成。 它們可能具有確定性,也可能不具有確定性。
在VLA的情況下,指令“移動堆棧指針n個步驟”是在編譯時創建的,但是變量n
是在運行時設置的,然后堆棧指針相應地移動以分配內存。
唯一一種在編譯時發生的分配是具有靜態存儲持續時間的對象的分配-意味着文件作用域變量和static
變量的分配。 在大多數系統上,通常在名為.data
和.bss
的數據段中保留了這些空間。
示例可以在這里找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.