Для некоторого кода на C++ моя логика требует булевского массива, содержащего 4 * 10^10 индексов. Я использую контейнер STL std::bitset
. Но его реализация как template < size_t N > class bitset;
ограничивает количество бит до верхнего предела типа данных size_t
(без знакового типа), который равен 2^32-1 (или 2^64-1) {Может ли кто-то подтвердить это также} ,Очень длинный булевский массив/std :: bitset
Я думал об обходном пути для этой проблемы, создав 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 ГБ статических данных. Если вы работаете в Windows, я думаю, вы можете получить не более 2 ГБ памяти. Попробуйте распределить его динамически (даже если это не будет работать, если вы на 32-битной системе). – jrok
@jrok Да, кажется, вы правы. Невозможно выделить 4 ГБ памяти. Будет работать над лучшей логикой, чтобы избежать этого. – Shobhit
Если это головоломка для соревнований или программирования, проблема, вероятно, основана на блокировании наивного решения, сделав данные 10 раз большими, чтобы поместиться в память в тестовой системе. – Yakk