在 64 位上调整 std::vector 大小的 bad_alloc 错误。它似乎将其限制为 32 位
Posted
技术标签:
【中文标题】在 64 位上调整 std::vector 大小的 bad_alloc 错误。它似乎将其限制为 32 位【英文标题】:bad_alloc error for std::vector resize on 64-bit. It seems to be limiting it to 32 bits 【发布时间】:2021-09-14 11:50:38 【问题描述】:为什么会出现 bad_alloc 错误?
它似乎将我限制为 32 位,但它是 64 位机器和编译器。 我正在使用它来存储向量 int 数组中的大量数据。 我尝试在编译期间设置堆和堆栈,但这似乎并没有影响 bad_alloc。
#include<iostream>
#include<vector>
//set vector with large array of integers
struct Fld
int array[256];
;
std::vector <Fld> fld;
int main()
std::cout << fld.max_size() << "\n";
int length = 100000000;
try
//show maximum vector array size
std::cout << fld.max_size() << "\n";
std::cout << "resize [" << length << "]\n";
//resize to size larger than 32 bit
fld.resize(length);
std::cout << "good\n";
catch(std::bad_alloc& ba)
std::cout << "bad_alloc caught: " << ba.what() << "\n";
【问题讨论】:
您有 102 GB 的 RAM 可用吗? 您可能内存不足。max_size
没有按照你的想法做。它可能与系统有关,但至少在我对单字节类型向量的测试中,它返回 2^64 - 1,这显然比你的内存可以容纳的要大得多。
【参考方案1】:
您受到可用存储量的限制。您尝试分配 ~102 giga字节的存储空间(每个 Fld
为 1KB)。大多数系统不允许您这样做。
max_size
是由相关数据结构大小强加的理论最大值。您的计算机有那么多存储空间并不是保证。
【讨论】:
我差了一个零。以上是关于在 64 位上调整 std::vector 大小的 bad_alloc 错误。它似乎将其限制为 32 位的主要内容,如果未能解决你的问题,请参考以下文章
如何在调整大小的 std::vector 的最后一个元素之后插入?
如何调整 Eigen::MatrixXd 的 std::vector 的大小
如何在不丢失现有数据的情况下调整 std::vector 的大小?