我正在使用以下代码在堆栈上创建一个位集数组:
int Rows = 800000;
int Columns = 2048;
bitset<Columns> data[Rows];
如果我不将堆栈大小提高到数百兆字节,则会出现堆栈溢出错误。
有没有办法在堆上分配这段代码?例如使用这样的代码(我什至不确定这段代码是否正确):
bitset<Columns>* data[Rows] = new bitset<Columns>();
编辑: 更重要的是,这是否有助于内存使用或速度?我为此使用堆栈还是堆有什么区别吗?我真的不想使用任何其他库,例如 Boost ......
我来自 Java 背景,一些 C++ 语法对我来说是新的,如果问题看起来有点错误,抱歉。
最佳答案
#include<bitset>
#include<vector>
constexpr int Rows = 800000;
constexpr int Columns = 2048;
int your_function() {
std::vector<std::bitset<Columns> > data (Rows);
// do something with data
}
这将在堆上分配内存,它仍然会占用之前占用的任何内存量(加上几个字节用于簿记)。然而,堆不像堆栈那样受固定大小的限制,而主要受系统内存量的限制,因此在相当现代的 PC 上,几百兆字节应该没问题。
我不确定这是否是您的担忧,但 bitset 的内存使用率并不低效 - gcc 上的
sizeof(std::bitset<2048>) == 256
因此您不会在那里浪费任何一点。关于c++ - 在堆上分配 bitset<N> 数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47553676/