使用可变长度数组有一些开销吗?可以在运行时通过命令行参数传递数组的大小吗?与自动和动态分配数组相比,为什么会引入它?
我知道C99之前的C标准(以及C++)说堆栈上的数组大小必须在编译时知道.但那是为什么呢?堆栈上的数组在运行时分配.那么为什么大小在编译时很重要?希望有人向我解释编译器在编译时将如何处理大小.谢谢.
这种数组的例子是:
void func()
{
/*Here "array" is a local variable on stack, its space is allocated
*at run-time. Why does the compiler need know its size at compile-time?
*/
int array[10];
}
Run Code Online (Sandbox Code Playgroud) GCC如何实现可变长度数组(VLA)?这些数组是否基本上指向动态分配的存储,例如alloca返回的存储?
我能想到的另一个选择是,这样的数组被分配为函数中的最后一个变量,因此在编译时可以知道变量的偏移量.但是,在编译期间,第二个VLA的偏移量将再次不知道.
这只是“这就是语言的工作方式”问题之一吗?编辑:
为什么动态内存允许在运行时分配数组的大小?
为什么我不能只使用从堆栈调用的变量,而不是从堆调用的变量?它们都是变量,其中一个只是从不同的地方调用,并且必须手动释放和创建。在堆栈中创建的变量可以在运行时更改,对吗?