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

来源:6-2 数组的边界

我实在太稳健了

2024-07-25

请教一下,我在C语言学习数组这一块,看到这么一段话:
由于 C 语言的数组是要分配到栈内存上的,那么这意味着数组的大小需要在编译期确定。
我不太理解,比如我在一个函数中定义了2个局部变量:
int num = 10;
char aaa[num];
局部变量是定义在栈上的,但是函数是运行时动态分配内存,运行到这个函数时申请,函数运行完毕释放,那么为什么要在编译的阶段就确定数组的大小呢,执行到这个函数的时候再分配不应该是执行阶段确定么?特别不理解

写回答

1回答

bennyhuo

2024-07-25

栈内存是在编译时确定的,是预分配给程序执行使用的一块内存,局部变量的开辟都会反应到指令上。为了追求栈内存的使用效率,栈内存的分配都是需要在编译时确定大小的,跟堆内存是有明显的区别的。堆内存可以动态申请和分配,代价就是访问效率较低。
0
1
我实在太稳健了
非常感谢!
2024-07-25
共1条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程