gpt4 book ai didi

c++ - 在堆上分配 bitset 数组

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:26 26 4
gpt4 key购买 nike

我正在使用这段代码在堆栈上创建一个位集数组:

int Rows = 800000;
int Columns = 2048;

bitset<Columns> data[Rows];

如果我不将堆栈大小增加到数百兆字节,我会收到堆栈溢出错误。

有什么方法可以在堆上分配这段代码吗?例如使用这样的代码(我什至不确定这段代码是否正确):

bitset<Columns>* data[Rows] = new bitset<Columns>();

编辑:更重要的是,这对内存使用或速度有帮助吗?为此,我使用 Stack 还是 Heap 有什么区别吗?我真的不想使用任何其他库,例如 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 的内存使用效率并不低- sizeof(std::bitset<2048>) == 256在 gcc 上,这样您就不会在那里浪费任何一点。

关于c++ - 在堆上分配 bitset<N> 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47553676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com