首页 > 解决方案 > C++ - 在堆上分配更大的数组

问题描述

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

标签: c++arraysvectorheap-memorystack-memory

解决方案


推荐阅读