Определить большой набор битов в C ++ - PullRequest
10 голосов
/ 25 апреля 2011

В моей программе мне нужно проверить, сгенерировано ли уже значение в наборе 2.5 * 10 ^ 9. Я рассчитываю создать примерно половину набора и должен иметь быстрый способ проверить и обновить его. Набор битов показался мне хорошей идеей, поскольку он занимает не слишком много памяти (1 бит на значение) и является быстрым.

Проблема в том, что когда я определяю свой набор в своем классе, я получаю segmentation fault, поскольку размер слишком велик (он работает с меньшими размерами).

private:
  std::bitset<2500000000UL> cover; // not working
  std::bitset<25000UL> cover; // working

Есть идеи?

Спасибо

PS: Я бы предпочел не использовать внешнюю библиотеку, если это возможно. Я уже использую GMP , но я не думаю, что у них есть битовая реализация для больших чисел.

Ответы [ 2 ]

17 голосов
/ 25 апреля 2011

Это может не быть вашей проблемой, но попробуйте выделить бит в наборе данных новыми, а не использовать стек.

Некоторые системы ограничивают размер стека, что может вызвать проблемы у вас.

0 голосов
/ 28 сентября 2015

Используйте std :: vector вместо std :: bitset для больших размеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...