【发布时间】:2020-08-04 13:18:53
【问题描述】:
C 支持可变长度数组:
int main(){
int num = 5;
int arr[num];
return 0;
}
我了解arr 是在运行时分配的。这是如何实现的?
它是否调用 C 运行时函数来分配再见?由于在编译期间分配量是未知的,因此不应该存在用于堆栈分配的指令。
作为一个附带问题,将它们用于malloc 和堆分配是否是一种好习惯,因为 VLA 在 C++ 中不受官方支持?
编辑:
似乎可以使用在堆栈帧上分配的alloca 来实现。
【问题讨论】:
-
VLA 在 C11 中也“仅”可选地支持(这意味着并非所有符合 C11 的编译器都需要支持它)
-
在您的示例中,分配量在编译时是已知的,当分配
arr时,num只能是 5。但您可以scanf("%d", &num);使其未知。