Questions tagged «automatic-storage»

3
std :: vector(ab)使用自动存储
考虑以下代码段: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } 显然,它将在大多数平台上崩溃,因为默认堆栈大小通常小于20MB。 现在考虑以下代码: #include <array> #include <vector> int main() { using huge_type = std::array<char, 20*1024*1024>; std::vector<huge_type> v(1); } 令人惊讶的是它也崩溃了!追溯(使用最新的libstdc ++版本之一)指向include/bits/stl_uninitialized.h文件,我们可以在其中看到以下几行: typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; std::fill(__first, __last, _ValueType()); 调整大小的vector构造函数必须默认初始化元素,这就是它的实现方式。显然,_ValueType()临时崩溃会使堆栈崩溃。 问题是这是否是符合标准的实现。如果是,那么实际上意味着使用巨大类型的向量是非常有限的,不是吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.