【发布时间】:2011-12-10 09:14:54
【问题描述】:
我真的不明白为什么我不能在堆栈上有一个可变大小的数组,所以像
foo(int n) {
int a[n];
}
据我了解,部分数据段的堆栈(-段)因此不是“恒定大小”。
【问题讨论】:
-
我认为没有任何技术原因,因为 C99 添加了该功能。
-
@MarkRansom:大多数情况下,这很棘手,我们已经有了
std::vector,所以他们不需要编译器来做。另一方面,gcc 和 msvc 无论如何都可以做到。 -
可能是因为过去应用程序专用于堆栈的内存较少。堆栈也是一个包含局部变量、参数值和返回地址的固定结构。对于具有固定大小堆栈的平台,此功能可能很危险。
-
@ThomasMatthews:这种解释在任何支持递归的语言中都站不住脚。
-
@ThomasMatthews,危险从未阻止将功能添加到 C++ 中。您应该知道自己在做什么。
标签: c++ arrays dynamic-data