C ++中数组的大小限制是多少?

时间:2013-12-06 13:20:28

标签: arrays size boolean limit

当限制为2082192或更高时,由于某种原因,这会崩溃。 为什么,以及如何提高此限制?数字2082192是否会响铃?

它似乎仅在我的机器上出现问题 - 它在Ideone.com上运行良好

我正在使用MinGW和Code :: Blocks以及-std = c ++ 11,但是在玩这些设置并且我无法修复它。

任何帮助将不胜感激!

#include <iostream>
#include <math.h>
#include <time.h>
#define limit 2082192

int main()
{
    float time_start = clock();
    bool bucket[limit];
    float root = sqrt(limit);

    for (unsigned int i = 1; i <= limit; ++i)
        bucket[i] = true;

    for (unsigned int i = 2; i <= root; ++i)
        for (unsigned int j = i*2; j <= limit; j+=i)
            bucket[j] = false;

    unsigned int primes = 0;
    for (unsigned int i = 2; i <= limit; ++i)
        if (bucket[i] == true)
            ++primes;

    float time_taken = clock() - time_start;

    std::cout << "Primes found: " << primes << " up to " << limit << " in " << time_taken;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

问题必须是有限的堆栈大小。

在Linux上,你可以修改它输入

$ ulimit -s unlimited

在您从中调用此程序的终端。

在Windows上,您可以使用-Wl,--stack=67108864编译标志调整堆栈大小,其中数字是预期的大小(以字节为单位)。