对于大型数组,堆大小超出了编译器

问题描述 投票:0回答:2

因此,我有一个15,000,000个元素的双数组,在运行时,需要从该数组中提取2000个元素的随机子集进行处理。

我尝试使用以下方法初始化数组:

static const double myArray[15000000] = {-2.1232, -6.4243, 23.432, ...};

但是,在运行时出现错误“ C1060编译器的堆空间不足”。在Visual Studio 2019中,我进入了项目属性->链接器->系统,并将堆保留大小修改为“ 8000000000”,我认为这足够大,并且我的机器上有16GB,但是我仍然返回相同的值错误。我也尝试过使用x64编译器,但无济于事。

我还尝试将数组写入csv,然后写入二进制文件,然后在运行时从中读取。但是,读取过程花费的时间太长,因为我需要从中读取,理想情况下,每秒读取几次。

我对C ++还是比较陌生,但是在内存分配方面尤其如此。您会提出什么建议呢?

c++ arrays memory heap allocation
2个回答
2
投票

如果二进制格式的15M双打,则可以embed that into your binary并引用它。首次加载二进制文件时,运行时开销仅比磁盘IO多一点,但比解析CSV快得多。


-1
投票

问题可能是您有足够的内存,但这不是后果。所以我的建议是使用std :: list

© www.soinside.com 2019 - 2024. All rights reserved.