我读到堆和堆栈的大小无法在编译时计算,需要在运行时评估。
我可以想到这段代码根据用户输入分配堆并需要运行时:
int size;
scanf("%d", &size):
void *ptr= malloc(size);
但是函数中不是已经存在所有堆栈变量吗?给定它们的数据类型(int
、char
、long
等),为什么编译器无法计算大小?
最佳答案
使用 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/