【发布时间】:2020-09-05 05:15:52
【问题描述】:
所以我有一个包含 15,000,000 个元素的双精度数组,在运行期间,需要从数组中提取 2000 个元素的随机子集进行处理。
我尝试使用以下方法初始化数组:
static const double myArray[15000000] = {-2.1232, -6.4243, 23.432, ...};
但是在运行时我收到错误“C1060 编译器堆空间不足”。在 Visual Studio 2019 中,我进入了项目属性 -> 链接器 -> 系统并将堆保留大小修改为“8000000000”,我认为它足够大,我的机器上有 16GB,但我仍然返回相同错误。我也尝试过使用 x64 编译器,但无济于事。
我还尝试将数组写入 csv,然后在运行时读取二进制文件并从中读取。但是,读取过程需要的时间太长,因为我需要读取它,理想情况下,每秒读取几次。
我对 C++ 比较陌生,但在内存分配方面尤其新。您有什么建议作为解决方案?
【问题讨论】:
-
为什么不从文件中加载数组?
-
你为什么要硬编码这样数量惊人的值?通常这是在运行时从文件中读取到
std::vector。成本应该是无关紧要的。 -
这听起来像是编译器在尝试编译应用程序时内存不足。可能与巨大的阵列有关。
-
使用指针而不是数组。动态分配数组。将二进制文件加载到其中。
标签: c++ arrays memory heap-memory allocation