因此,我有一个15,000,000个元素的双数组,在运行时,需要从该数组中提取2000个元素的随机子集进行处理。
我尝试使用以下方法初始化数组:
static const double myArray[15000000] = {-2.1232, -6.4243, 23.432, ...};
但是,在运行时出现错误“ C1060编译器的堆空间不足”。在Visual Studio 2019中,我进入了项目属性->链接器->系统,并将堆保留大小修改为“ 8000000000”,我认为这足够大,并且我的机器上有16GB,但是我仍然返回相同的值错误。我也尝试过使用x64编译器,但无济于事。
我还尝试将数组写入csv,然后写入二进制文件,然后在运行时从中读取。但是,读取过程花费的时间太长,因为我需要从中读取,理想情况下,每秒读取几次。
我对C ++还是比较陌生,但是在内存分配方面尤其如此。您会提出什么建议呢?
如果二进制格式的15M双打,则可以embed that into your binary并引用它。首次加载二进制文件时,运行时开销仅比磁盘IO多一点,但比解析CSV快得多。
问题可能是您有足够的内存,但这不是后果。所以我的建议是使用std :: list