在这种情况下最有趣的是,昨天它的工作还可以。 我不知道是什么原因引起了麻烦
size = 480 000 000;
std::vector<char> result(size);
答案 0 :(得分:1)
Vector尝试分配所需大小的连续内存块。根据系统内存碎片,可能没有0.5Gb块可用,并且内存分配失败。
答案 1 :(得分:0)
你分配了很多连续的内存,所以如果内存不足就会得到bad_alloc。
答案 2 :(得分:0)
在这种情况下最有趣的是,昨天它的工作还可以。
std::vector
的内容并未存放在空气中;它们占据了计算机的内存。显然,计算机中的内存情况一直在变化。自昨天以来可用的总可用空间变得更小,或者现在有更多的碎片,所以即使总可用空间超过470MB,也没有任何地方没有免费的连续 470MB点。
或许std::deque
可以在短期内优雅地解决问题:
与
std::vector
相反,不存储双端队列的元素 连续地:典型的实现使用单独的序列 分配固定大小的数组,[...]
当然,正如相同的文档所解释的那样,这有一些缺点。