gcc中的可变长度数组

时间:2016-12-08 12:34:06

标签: c++ arrays gcc

我是一名C ++程序员。所以,我刚刚了解到gcc有一个扩展,允许可变大小的数组,而不必动态分配内存。我想知道这个可变大小的数组是否在堆栈或堆中分配。

3 个答案:

答案 0 :(得分:5)

从概念上讲,它被分配了自动存储持续时间,因此在实现方面,你可以认为它在堆栈中。

请考虑使用std::vector作为替代方案,因为它是标准的,因此也是可移植的C ++。

答案 1 :(得分:0)

可变大小的数组在堆栈中分配。

答案 2 :(得分:0)

C ++标准不支持VLA,尽管某些编译器(如GCC)确实将它们作为扩展。

std :: vector<> GCC实施中的VLA。

  • std :: vector可以调整大小并在堆上分配内存。
  • VLA不可调整大小,受最大堆栈大小的限制,并且不分配内存。

因此存在灵活性差异,并且可能存在性能差异,尤其是在阵列创建定期发生时(例如在紧密循环中)。

也就是说,有时可以通过移动“阵列”来减轻这些差异中的一些差异。在循环之外等等