c++ - 如何将 2D vector 大小与操作系统内存地址限制进行比较?

标签 c++ vector double out-of-memory

在从正在读入的网格数据集中创建 2D vector 时,我遇到了内存异常。我试图存储 3400 万个 double 值。这是我和其他人解决该问题的上一个问题:

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

基本上,我将 Visual Studio 中链接器系统设置中的/LARGEADDRESSAWARE 选项设置为"is",从而修复了该问题并使其正常工作。

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

  1. 知道二维 vector (存储 double 值)的尺寸后,计算它们的大小?
  2. 确定我可以创建多少个这种大小的二维 vector ?现在我需要创建大约 10 个。
  3. 将/LARGEADDRESSAWARE 设置为"is"时确定内存分配的最大大小?
  4. 比较两者。

谢谢。

最佳答案

  1. bytes_per_vector = m * (sizeof vector<double> + n * sizeof double) 哪里mn是 vector 的维度。
  2. fits_in_memory = free_bytes / bytes_per_vector
  3. 在 C++ 中没有标准方法来获取剩余的可用内存量。 GlobalMemoryStatusEx可能有助于粗略估计,但要意识到您的程序中可能还有其他东西也使用内存,并且还有其他程序正在运行。
  4. 如果您有可用字节数和所需字节数,则可以使用“小于”运算符:<

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

关于c++ - 如何将 2D vector 大小与操作系统内存地址限制进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020496/

相关文章:

C++:obj 文件的链接顺序重要吗?

c++ - 如何动态添加对象

java - java 中的 Push_back 和 pop_back

c++ - 将 vector 分配给结构的 vector 字段

c# - double.NaN 和 double.NegativeInfinity 的 CompareTo 行为

java - 从几个科学计数法中获取数字

c++ - 透明地接受事件

c++ - 使用指针在 C++ 中传递标量和数组数据

java - 在 Java 中有意义地比较两个字符串

c++ - OpenCV鼠标调用?