对于某些C ++代码,我的逻辑需要一个包含4 * 10 ^ 10个索引的布尔数组。我正在使用STL容器std::bitset
。但它的实现为template < size_t N > class bitset;
将位数限制为size_t
(无符号整数类型)数据类型的上限,即2 ^ 32-1(或2 ^ 64-1){< strong>也可以确认一下}。
我想通过创建array of bitset
来解决此问题的方法,如bitset<100000000> checkSum[400]
;
这合法吗?我收到以下编译错误(test.cpp是我的C ++文件)
/tmp/cc0gR0c6.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x35f): relocation truncated to fit: R_X86_64_32 against `.bss'
test.cpp:(.text+0x373): relocation truncated to fit: R_X86_64_32 against `.bss'
collect2: ld returned 1 exit status
这可以以某种方式修复或有更好的解决方法吗?
答案 0 :(得分:1)
我认为你应该使用vector而不是数组,就像:
vector<bitset<1000000> > checkSum;
答案 1 :(得分:0)
size_t是32位还是64位,具体取决于您是编译32位还是64位代码。看起来您可以简单地编译64位目标并解决此问题。