【发布时间】:2023-04-01 10:58:01
【问题描述】:
据我了解,在 C 和 C++ 中,我们在堆栈上创建其大小在编译时已知的数据结构,并且我们将堆(无 malloc/new-delete)用于大小未知的东西编译时间并在运行时决定。那么,我的 g++ 编译器是否允许我执行以下代码 sn-p 之类的操作。
int main(void)
{
int n ;
cin >> n ; // get the size of array.
int arr[n] ; // create a variable sized array.
.... do other stuff ...
}
具体来说,在数组的情况下:
数组在栈上被分配了一块连续的内存,栈上和栈下都有变量,所以必须知道数组的大小,以便栈上数组上面的变量、数组本身和下面的变量堆栈上的数组都可以整齐地放入内存中。 堆栈上的可变大小数组是如何实现的? 为什么它们甚至是必要的?为什么我们不能只将堆用于可变大小的缓冲区?
编辑:
我从 cmets 了解到,C 和 C++ 对 VLA 是否为标准有不同的规则,还有 Neil Butterworth 的评论,即一次询问两种语言的问题通常不是一个好主意。谢谢大家,所以我从我的问题中删除了 C 标记,因为我打算主要询问 C++,代码 sn-p 语法很明显。很抱歉造成混乱,并感谢您的回复。
【问题讨论】:
-
C++ 不支持 VLA。
-
这样的数组不是标准 c++ 的一部分。
-
@felix alloca 也不是标准 C++ 的一部分。
-
"为什么它们甚至是必要的?" --> 为什么不把所有的编程都用汇编来完成呢?同样的原因...