C ++ - 在堆上分配更大的数组

时间:2018-05-03 10:41:14

标签: c++ arrays vector stack heap

我昨天下载了Visual Studio并启动了C ++。我现在遇到了一个问题。我有一个超级简单的程序,用布尔填充一个大数组,然后计算真实元素的数量。我现在想要为非常大的数组运行我的程序(最好是2 ^ 33或2 ^ 34的长度)。我已经明白,这会产生堆栈溢出的问题,我应该在堆上分配数组。我不明白怎么做。我也听说习惯使用向量而不是数组,但我认为这些可能会更慢,所以我坚持使用数组。如何使程序尽可能快地运行大数组长度?

void makeB(bool *a, long double length)
{
    for (long x = 0; x < sqrtl(length/2)+1; ++x)
    {
        for (long y = x; y < sqrtl(length)+1; ++y)
        {
            long int z = x * x + y * y;
            if (z < length)
            {
                a[z] = true;
            }
        }
    }
}

int main()
{
    const long length = 268435457;
    static bool a[length] = {};
    long b = 0;
    makeB(a, length);
    for (long i = 0; i < length; ++i)
    {
        if (a[i])
        {
            b += 1;
        }
    }
    printf("%ld: ", length - 1);
    printf("%ld.\n", b);

    char input;
    cin >> input;
    return 0;
}

澄清我希望能够将长度变量增加到更大的值而不会出现堆栈溢出错误。快速代码也是首选。如果真的更好,我也可以使用矢量。如果它让我的困惑更清楚,我来自Java。

谢谢!

编辑:首先我需要指出的是,确实2 ^ 40对于我的系统来说太多了,正如几乎所有人所指出的那样,抱歉。我觉得我可以期待2 ^ 33。其次,感谢所有的答案,但最终的共识是什么?我应该看一下std :: make_unique吗?再次感谢!

0 个答案:

没有答案