我知道内存是在编译时分配给自动变量的,例如int a;
并存储在堆栈中,但如果是变量数组的输入是从用户那里获取的,例如
#include<stdio.h>
main()
{
int n;
printf("enter the size of array");
scanf("%d",&n);
int a[n];
.......
}
内存是在运行时分配的。所以我的问题是,自动分配是否取决于大小写。谢谢
我知道内存是在编译时分配给自动变量的,例如int a;
并存储在堆栈中,但如果是变量数组的输入是从用户那里获取的,例如
#include<stdio.h>
main()
{
int n;
printf("enter the size of array");
scanf("%d",&n);
int a[n];
.......
}
内存是在运行时分配的。所以我的问题是,自动分配是否取决于大小写。谢谢
处理自动分配的代码是在编译时创建的。实际分配发生在运行时。您将拥有诸如“将变量压入堆栈”或“将变量放入寄存器”之类的机器代码,但是在执行程序之前,该代码当然什么也不做。所有堆栈分配都是在运行时完成的。它们可能具有也可能不具有确定性。
在 VLA 的情况下,指令“移动堆栈指针 n 步”是在编译时创建的,但变量n
是在运行时设置的,然后相应地移动堆栈指针,以分配内存。
在编译时发生的唯一类型的分配是具有静态存储持续时间的对象的分配 - 意味着文件范围变量和static
变量的分配。这些空间保留在通常命名的数据段.data
和.bss
大多数系统上。
可以在此处找到示例。
在您的示例中,不清楚“a”的定义位置。因此,我将通过对此做出假设来尝试回答这个问题。