gpt4 book ai didi

c - C中变量定义长度的数组如何存储在内存中?

转载 作者:行者123 更新时间:2023-12-04 12:37:01 26 4
gpt4 key购买 nike

我已经尝试搜索了很多次。静态数组通常存储在堆栈中,它们的大小在编译时确定。例如:

int main()
{
int n;
scanf("%d", &n);
int array[n];
printf("%u", sizeof(array));
return 0;
}

数组的大小随着 n 值的不同而变化。因此,这里的数组不应该存储在堆中,因为大小是在运行时确定的吗?一直困惑于此。请帮忙。谢谢!

最佳答案

shouldn't the array here be stored in a heap as the size is determined at run-time?

可以,但这不是唯一的方法。 C 编译器足够聪明,可以延迟在自动内存(通常称为“堆栈”)中为这个可变长度数组分配内存到数组大小已知的代码点.

为了使这成为可能,需要为 sizeof 创建一个相关技巧。通常,sizeof 在编译时计算;然而,可变长度数组改变了这一点,要求在运行时评估 VLA 上的 sizeof 表达式。同样,编译器通过将 VLA 的实际大小存储在内存中单独的隐藏位置来为此提供“启用技术”。

关于c - C中变量定义长度的数组如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28833986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com