[英]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.