2

对于某些 C++ 代码,我的逻辑需要一个包含 4*10^10 索引的布尔数组。我正在使用 STL 容器std::bitset。但是它的实现template < size_t N > class bitset;将位数限制为size_t(无符号整数类型)数据类型的上限,即 2^32-1(或 2^64-1){有人也可以确认这一点}。

我想了一个解决这个问题的方法,方法是创建一个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

这可以以某种方式解决还是有更好的解决方法?

4

2 回答 2

1

我认为你应该使用向量而不是数组,就像:

vector<bitset<1000000> > checkSum;
于 2013-07-13T12:09:42.970 回答
0

size_t 是 32 位还是 64 位,具体取决于您是编译 32 位还是 64 位代码。看起来您可以简单地为 64 位目标编译并解决这个问题。

于 2013-07-13T12:04:30.760 回答