【问题标题】:bitset declration causes SIGSEGV位集声明导致 SIGSEGV
【发布时间】:2014-12-06 20:13:25
【问题描述】:

这是查找一些素数的(不完整的)代码。

#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;
}

程序在isprime 的声明处以SIGSEGV 崩溃。 问题是什么 ? 我该如何解决?

使用 Ubuntu 14.04,g++-4.8.1。

【问题讨论】:

  • 5000亿条;真的吗?
  • 你有什么机器可以在内存中存储如此大的数据集?

标签: c++ segmentation-fault std-bitset


【解决方案1】:

虽然生成的数组可能不是非常大,但它驻留在堆栈中,具有有限的(和平台相关的)大小(例如 1MB 是一种流行的大小)。尝试使用 new 运算符创建对象,它将被放置在堆上。

【讨论】:

  • 你不认为 58GB 的​​ bitset 很大吗?
  • OP 说他正在计算素数,也许他有 64+ GB RAM 和一台功能强大的超级计算机可供使用?另外,这不是他问的问题,崩溃是堆栈溢出引起的。
猜你喜欢
  • 2014-02-15
  • 2017-11-09
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2015-12-12
  • 2016-06-06
  • 2014-10-22
  • 2010-11-29
相关资源
最近更新 更多