繁体   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