此问题已在此处有答案:
How does GCC create an array on the stack without its size being given by a constant variable? [duplicate](2个答案)
How does GCC implement variable-length arrays?(2个答案)
Dynamic Arrays and Static Arrays Compile Time or Runtime? [duplicate](2个答案)
昨天关门了。
我知道C++中固定大小的数组在堆栈上分配,我知道使用new[]关键字创建的动态大小的数组将在堆上分配。
但是考虑一下这段代码:
std::cout << "Enter a length of the array: "
int length{};
std::cin >> length;
int arr[length]{};
for (int i{ 0 }; i < length; ++i)
{
arr[i] = i;
std::cout << arr[i] << ' ';
}
std::cout << '\n'
它编译起来没有问题。那么,我假设这样的数组被隐式地放在堆上是否正确呢?如果是,它是如何工作的,这个数组使用的内存也是隐式释放的吗?
1条答案
按热度按时间ars1skjm1#
这不是标准的C++。
您正在使用的编译器支持在同一文件中混合使用C和C功能。对可变长度数组的支持是C的一个特性。
可变长度数组通常存储在堆栈中。这或多或少相当于用
alloca()
分配数组。(我建议避免使用可变长度数组。由于它们不是C的一部分,因此它们可能与某些C功能的交互很差,大多数C编译器根本不支持它们。您可能希望使用
std::vector
代替。