c++ - 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 - `int a = 2; int b = a;` 报告意外错误
- kubernetes - 在grafana中查看kubernetes pods部署状态的方法
- angular - 带有表单的单元测试角度指令
- ios - Crashlytics 显示哪些 Analytics 事件会导致崩溃?
- javascript - 如何在不使用本地网络服务器的情况下读取 chrome 中的本地文本文件?
- usb - libusbdotnet 找不到 RFIDeas USB HID 设备
- python - 将 python 脚本转换为函数以遍历每一行
- codeigniter - CodeIgniter - 无法访问控制器文件
- node.js - 使用 nodejs lib 在 elasticsearch 上执行原始查询
- c# - 当任何参数为空时,模型变为空