gcc如何分配静态运行时间已知的数组长度

ely*_*hiv 3 c++ gcc static-allocation

我写了以下代码:

int tester(int n)
{
    int arr[n];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这段代码使用g ++编译,没有警告.

我的问题是 - 如何?参数n在运行时是已知的,在数组中是静态分配的.gcc是如何编译的?

Ker*_* SB 7

这是GCC为C++提供的扩展,尽管自C99以来C可以正确地支持可变长度数组("VLA").

实施并不十分困难; 在典型的调用堆栈实现中,该函数只需要保存堆栈帧的基础,然后按动态指定的量推进堆栈指针.如果数量过大,你会得到未定义的行为(在Stack Overflow中显示),这使得它们比使用权利要好得多std::vector.

在某种程度上,我们已经努力为C++添加一个类似的功能,但就类型系统而言,这种结果出乎意料地难以解决(例如,它的类型是arr什么?它如何在函数模板中推断出来?).这个问题在C语言中不那么明显,它有一个更简单的类型系统和对象模型(但是说,你仍然认为C对于拥有VLA更糟糕,标准的相当一部分花费在它们上,并且语言会如果没有它们,它们会变得相当简单,而且不一定比较差.)