在 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 向下调整大小

如何在不丢失现有数据的情况下调整 std::vector 的大小?

调整 std::vector<std::unique_ptr<T>> 大小的性能

如何调整 std::vector<std::queue<std::unique_ptr<int>>> 的大小?