ely*_*hiv 3 c++ gcc static-allocation
我写了以下代码:
int tester(int n)
{
int arr[n];
// ...
}
Run Code Online (Sandbox Code Playgroud)
这段代码使用g ++编译,没有警告.
我的问题是 - 如何?参数n在运行时是已知的,在数组中是静态分配的.gcc是如何编译的?
这是GCC为C++提供的扩展,尽管自C99以来C可以正确地支持可变长度数组("VLA").
实施并不十分困难; 在典型的调用堆栈实现中,该函数只需要保存堆栈帧的基础,然后按动态指定的量推进堆栈指针.如果数量过大,你会得到未定义的行为(在Stack Overflow中显示),这使得它们比使用权利要好得多std::vector
.
在某种程度上,我们已经努力为C++添加一个类似的功能,但就类型系统而言,这种结果出乎意料地难以解决(例如,它的类型是arr
什么?它如何在函数模板中推断出来?).这个问题在C语言中不那么明显,它有一个更简单的类型系统和对象模型(但是说,你仍然认为C对于拥有VLA更糟糕,标准的相当一部分花费在它们上,并且语言会如果没有它们,它们会变得相当简单,而且不一定比较差.)
归档时间: |
|
查看次数: |
300 次 |
最近记录: |