[英]Is there a size limit on the length of a std::array?
如果我尝试在使用 g++ 7.3.1 编译的 Centos 7.6 系统上实例化大型二维 std::array,则会出现分段错误:
int main()
{
const unsigned NUM_BUFFERS = 200;
const unsigned BUFFER_SIZE_BYTES = 1024 * 1024;
std::array<std::array<unsigned char, BUFFER_SIZE_BYTES>, NUM_BUFFERS> buffer;
}
给出:
$ ./main
Segmentation fault (core dumped)
std::array 的长度是否有大小限制?
我已经在堆栈上声明了这个数组,但大概存储在空闲存储上。 什么在这里失败?
你得到一个堆栈溢出。
std::array
就地分配,堆栈空间通常非常有限(例如在 Windows 上为 1MB,在 Linux 上为 4-8 MB)。
使用std::vector
代替,它在堆上分配。
std::array
的长度有大小限制吗?
对象大小的限制是由实现定义的。 该标准指定了所需的最小限制如下,但大多数实现可能支持更大的对象(最多可用内存):
[限制]
对象的大小 ([intro.object]) [262 144]。
我已经在堆栈上声明了这个数组,但大概存储在免费存储上
你猜错了。 std::array
不会从免费存储中分配任何内容,但将数组作为成员。
什么在这里失败?
堆栈溢出。
执行堆栈的大小取决于实现。 在桌面系统上,堆栈的默认大小是一到几兆字节。 每个函数调用的所有自动变量都必须适合这个空间。
为避免此限制,请动态分配数组(例如使用std::make_unique
或std::vector
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.