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

标签 c compilation stack

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

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

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/

相关文章:

c - 为什么我的 PSET1 Credit 可以在沙盒中运行,但不能在 Check50 中运行?

安卓工作室 : Are language xml files compiled into the apk?

c++ - 函数名称之前的预期初始化程序

c - C 中的函数参数和变量地址

android - Activity 太多会影响我的表现吗?

c程序输出说明

C 自动变量和内存地址

c - 尝试从 .txt 文件复制整数时出现段错误

compilation - 使用 ffmpeg 为视频添加字幕

java - Balanced Parens 在 Java 中没有返回平衡