看不懂:C 语言的数组是要分配到栈内存上的,那么这意味着数组的大小需要在编译期确定
来源:6-2 数组的边界

我实在太稳健了
2024-07-25
请教一下,我在C语言学习数组这一块,看到这么一段话:
由于 C 语言的数组是要分配到栈内存上的,那么这意味着数组的大小需要在编译期确定。
我不太理解,比如我在一个函数中定义了2个局部变量:
int num = 10;
char aaa[num];
局部变量是定义在栈上的,但是函数是运行时动态分配内存,运行到这个函数时申请,函数运行完毕释放,那么为什么要在编译的阶段就确定数组的大小呢,执行到这个函数的时候再分配不应该是执行阶段确定么?特别不理解
写回答
1回答
-
栈内存是在编译时确定的,是预分配给程序执行使用的一块内存,局部变量的开辟都会反应到指令上。为了追求栈内存的使用效率,栈内存的分配都是需要在编译时确定大小的,跟堆内存是有明显的区别的。堆内存可以动态申请和分配,代价就是访问效率较低。012024-07-25
相似问题
内存模型
回答 2
栈和堆的内存地址问题
回答 1