склонение битов вызывает SIGSEGV

0

Здесь (неполный) код, чтобы найти некоторые простые числа.

#include<iostream>
#include<bitset>
#include<cmath>

#define SQRT_10_POW_12 1000000llu
#define _10_POW_12_BY_2 1000000000000llu/2llu

using namespace std;

int main()
{
    unsigned int T;
    unsigned long long n;
    register unsigned int it1,it2;

    bitset<SQRT_10_POW_12+1llu> isprime;
    bitset<_10_POW_12_BY_2+1llu> nums;

    return 0;
}

Программа сбой SIGSEGV при объявлении isprime. В чем проблема? Как я могу это решить?

Использование Ubuntu 14.04, g++ - 4.8.1.

  • 2
    500 миллиардов записей; действительно?
  • 0
    Какой монстр машины у вас может хранить такие большие наборы данных в памяти?
Теги:
sigsegv
std-bitset

1 ответ

2
Лучший ответ

Хотя результирующий массив не может быть действительно огромным, он находится в стеке с ограниченным (и зависящим от платформы) размером (например, 1 МБ является популярным размером). Попробуйте создать объект с помощью new оператора, вместо этого он будет помещен в кучу.

  • 0
    Вы не думаете, что битрейт 58 ГБ огромен?
  • 1
    ОП заявил, что он вычисляет простые числа, может, у него в распоряжении имеется 64 ГБ оперативной памяти и мощный суперкомпьютер? Кроме того, это не проблема, о которой он спрашивал, сбой вызван переполнением стека.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню