Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;内存使用率很低 我在BC++中使用BITSSET STD::BITSESET/COM>(即,大小为29621645位)。每个位集大约占29MB,这是一个很大的数字_C++_Bitset_Bitvector_Bitstring - Fatal编程技术网

如何在C++;内存使用率很低 我在BC++中使用BITSSET STD::BITSESET/COM>(即,大小为29621645位)。每个位集大约占29MB,这是一个很大的数字

如何在C++;内存使用率很低 我在BC++中使用BITSSET STD::BITSESET/COM>(即,大小为29621645位)。每个位集大约占29MB,这是一个很大的数字,c++,bitset,bitvector,bitstring,C++,Bitset,Bitvector,Bitstring,我偶然发现了一个名为sdsl的库,它有自己的位集sdsl::bit_vector。我惊讶于它的低尺寸和上面相同的位数。当我实例化sdsl::bit_vector(29621645)时,它只有3.6MB。当查看他们的代码时,我根本无法理解他们是如何用如此低的内存表示如此大的位集的 有人能解释一下这个惊人的“把戏”吗 链接到代码: 作弊链接: (旁注:我知道不能在sdsl::bit_vector上执行逐位操作)29兆字节是3.6兆字节,我不认为这有什么诀窍,它只是在字节中存储8位,而3.6兆字节正

我偶然发现了一个名为
sdsl
的库,它有自己的位集
sdsl::bit_vector
。我惊讶于它的低尺寸和上面相同的位数。当我实例化
sdsl::bit_vector(29621645)
时,它只有3.6MB。当查看他们的代码时,我根本无法理解他们是如何用如此低的内存表示如此大的位集的

有人能解释一下这个惊人的“把戏”吗


链接到代码: 作弊链接:


(旁注:我知道不能在
sdsl::bit_vector
上执行逐位操作)

29兆字节是3.6兆字节,我不认为这有什么诀窍,它只是在字节中存储8位,而3.6兆字节正是从连续内存中存储的29621645位所期望的。这并没有什么诀窍。自定义内存分配,而不是只使用单个字节/int/位。但是当我将
std::bitset b
存储为二进制文件时,它使用了29兆字节。有没有一种方法可以让我将它存储为紧凑型?如果是这样,它是否能够像常规的
std::bitset
一样快速地执行逐位操作?@Devolus,不确定vector bool与
std::bitset
不同。