C++ 位集删除导致SIGSEGV

C++ 位集删除导致SIGSEGV,c++,segmentation-fault,std-bitset,C++,Segmentation Fault,Std Bitset,下面是查找一些素数的(不完整)代码 #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;

下面是查找一些素数的(不完整)代码

#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;
}
#包括
#包括
#包括
#定义SQRT_10_POW_12 10000000000LLU
#用2 10000000000000000LLU/2llu定义10功率12功率
使用名称空间std;
int main()
{
无符号整数T;
无符号长n;
寄存器无符号整数it1、it2;
位集互质;
位集nums;
返回0;
}
在声明isprime时,程序将与
SIGSEGV
一起崩溃。 有什么问题? 我如何解决这个问题


使用Ubuntu 14.04,g++-4.8.1。

虽然生成的数组可能不是很大,但它驻留在堆栈上,堆栈的大小有限(并且取决于平台)(例如1MB是一种流行的大小)。尝试使用
new
操作符创建对象,它将被放在堆上。

5000亿个条目;真的吗?你有什么样的机器可以在内存中存储如此大的数据集?你不认为一个58GB的比特集是巨大的吗?OP说他在计算素数,也许他有64+GB的RAM和一台功能强大的超级计算机可以使用?此外,这不是他所问的问题,崩溃是由堆栈溢出引起的。