g++ 内存不足为 std::bitset 分配
g++ out of memory allocating for std::bitset
在这里我分配了 10^9 位:
#include <bitset>
#include <iostream>
const int N = 1000000000;
std::bitset<N> b;
int main()
{
std::cout << sizeof(b) << std::endl;
}
我得到cc1plus.exe: out of memory allocating 268439551 bytes
.
但是当我这样做时
#include <bitset>
#include <iostream>
const int N = 1000000000;
int l[N/32];
int main()
{
std::cout << sizeof(l) << std::endl;
}
125000000 字节 (125 MB) 分配正常。如果我将N
更改为不同的 10 次方,我会看到两个sizeof
是相同的。我什至没有看到 268439551 字节限制来自哪里,因为那是 268.4 MB,我有大约 4 GB 的可用内存。即使在 32 位系统上,~200 MB 也不应该引起问题,并且以某种方式达到了字节限制。是什么导致了这里的问题?
在具有 8 GB RAM 的 Windows 8.1 上使用 gcc 4.8.3。
这似乎是 c++11 的 GCC 的一个错误:Gcc 使用大量的内存和处理器能力以及大 C++11 位集。使用 -std=c++98
进行编译对我来说是一种临时解决方法。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- g++ 内存不足为 std::bitset 分配
- 如何将bitset分配给未签名的char矢量