小编bit*_*ten的帖子

无法分配小于 std::vector::max_size() 的大 cpp std::vector

vector<bool>我正在尝试在 C++ 中为 50,000,000,000 个条目分配 a ;但是,程序出错了。在抛出 'std::bad_alloc' What(): std::bad_alloc 实例后调用终止(或者在在线编译器中它刚刚结束)。

我最初以为这是由于尺寸太大造成的;然而,v1.maxsize()对我来说已经超过50GB了。但令人困惑的是,当我减少条目数量时,它工作得很好。

问题:考虑到条目数小于向量的最大大小,根本原因可能是什么?

其他问题/答案表明类似的问题是由于在 32 位 cpu 上造成的;不过我有一个64位的。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    long size = 50000000000;
    std::vector<bool> v1;

    std::cout << "max_size: " << bool(v1.max_size() > 50000000000) <<"vs" << size << "\n";
    
    v1 = std::vector<bool>(size,false);
    cout << "vector initialised \n" << endl;
    
    cout << v1.size() << endl;
        
}
Run Code Online (Sandbox Code Playgroud)

注意:我本质上是试图创建一个内存高效位图来跟踪不同数据结构的某些地址是否已初始化。我无法使用本文中提到的位集,因为其大小在编译时未知。

c++ stdvector

-2
推荐指数
1
解决办法
263
查看次数

标签 统计

c++ ×1

stdvector ×1