我昨天下载了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吗?再次感谢!