如何将 2D 矢量大小与 OS 内存地址限制进行比较?

How to compare 2D vector size with OS memory address limitations?

我 运行 在从我读入的网格化数据集创建 2D 向量时出现内存异常。我试图存储 3400 万个双精度值。这是我和其他人解决该问题的上一个问题:

Vector of vector storage limitations - getting "Microsoft C++ exception: std::bad_alloc at memory location 0x0031650C." error

基本上,我在 Visual Studio 的链接器系统设置中将 /LARGEADDRESSAWARE 选项设置为 "Yes",修复了它并使其正常工作。

问题:如果我想预先计算网格化数据集的大小并警告用户他们需要缩小输入,我该如何:

  1. 一旦我知道它们的维度,就计算我的二维向量(存储双精度值)的大小?
  2. 确定我可以创建多少个这种大小的二维向量?现在我需要创建大约 10 个。
  3. 确定内存分配的最大大小,将 /LARGEADDRESSAWARE 设置为 "Yes"?
  4. 比较两者。

谢谢。

  1. bytes_per_vector = m * (sizeof vector<double> + n * sizeof double) 其中 mn 是向量的维度。
  2. fits_in_memory = free_bytes / bytes_per_vector
  3. 在 C++ 中没有获取剩余空闲内存量的标准方法。 GlobalMemoryStatusEx 可能对粗略估计有用,但要意识到您的程序中可能还有其他东西也在使用内存,还有其他程序 运行。
  4. 如果您有足够的可用字节数和您需要的字节数,那么您可以使用 "less than"-运算符:<

我建议您简单地向用户报告向量将使用多少内存,让他们担心是否有足够的可用内存。