在从正在读入的网格数据集中创建 2D vector 时,我遇到了内存异常。我试图存储 3400 万个 double 值。这是我和其他人解决该问题的上一个问题:
基本上,我将 Visual Studio 中链接器系统设置中的/LARGEADDRESSAWARE 选项设置为"is",从而修复了该问题并使其正常工作。
问题:如果我想预先计算网格数据集的大小并警告用户需要缩小输入,我该如何:
- 知道二维 vector (存储 double 值)的尺寸后,计算它们的大小?
- 确定我可以创建多少个这种大小的二维 vector ?现在我需要创建大约 10 个。
- 将/LARGEADDRESSAWARE 设置为"is"时确定内存分配的最大大小?
- 比较两者。
谢谢。
最佳答案
-
bytes_per_vector = m * (sizeof vector<double> + n * sizeof double)
哪里m
和n
是 vector 的维度。 -
fits_in_memory = free_bytes / bytes_per_vector
- 在 C++ 中没有标准方法来获取剩余的可用内存量。 GlobalMemoryStatusEx可能有助于粗略估计,但要意识到您的程序中可能还有其他东西也使用内存,并且还有其他程序正在运行。
- 如果您有可用字节数和所需字节数,则可以使用“小于”运算符:
<
我建议您只需向用户报告 vector 将使用多少内存,让他们担心是否有足够的可用内存。
关于c++ - 如何将 2D vector 大小与操作系统内存地址限制进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020496/