繁体   English   中英

std::array 的长度是否有大小限制?

[英]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_uniquestd::vector )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM