gpt4 book ai didi

c - 为什么不能在编译时确定堆栈的大小?

转载 作者:行者123 更新时间:2023-11-30 20:28:56 25 4
gpt4 key购买 nike

我读到堆和堆栈的大小无法在编译时计算,需要在运行时评估。

我可以想到这段代码根据用户输入分配堆并需要运行时:

int size;
scanf("%d", &size):
void *ptr= malloc(size);

但是函数中不是已经存在所有堆栈变量吗?给定它们的数据类型(intcharlong 等),为什么编译器无法计算大小?

最佳答案

使用 C99,可以在堆栈上创建可变长度数组 (VLA)。这些数组将具有基于运行时参数或计算表达式的动态大小。在这些情况下,直到运行时才能计算堆栈大小。

例如:

int f(int n) {
// Size based on input
int x[n] ;

// Dynamic size
int m = n+5000 ;
int y[mm] ;

};

不用说,如果无法计算单个函数的分配,就无法计算完整程序的堆栈大小

关于c - 为什么不能在编译时确定堆栈的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548259/

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