【问题标题】:How to test limit of available memory (C++)?如何测试可用内存的限制(C++)?
【发布时间】:2014-04-16 15:57:51
【问题描述】:

我必须通过设置我的构造函数的值来检查我的 PC 可用内存的限制。内存应该是动态分配的。示例:

  class matrix{

    int lines;
    int columns;

public:
    matrix(long lin, long col){
        lines=lin;
        columns=col;
       }
};

如何检查哪些值 (lin, col) 是我的内存限制? (长型只是一个例子)。

///编辑: “通过引入增加的值(矩阵的维度)导致内存分配失败的情况” 所以问题是:有没有可能检查哪些值是最后可以引入的?

【问题讨论】:

  • 有点丢了这个。你的意思是你的进程的可用内存吗?
  • PC 的可用内存是指 RAM?或者您在寻找可以分配多少虚拟内存?
  • @Naveen ,我认为这与 RAM 有关。非常抱歉。这是学校的练习,不是我发明的。
  • 我编辑了我的帖子:“通过引入增加的值(矩阵的维度)导致内存分配失败的情况”所以问题是:是否有可能检查哪些值是最后一个可以介绍一下?

标签: c++ memory dynamic constructor allocation


【解决方案1】:

内存应该是动态分配的

您无需测试可用内存 - operator new 会为您执行此操作(当然,除非它超载)。如果operator new 失败,它要么抛出std::bad_alloc,要么返回0,具体取决于call 的运算符版本。

【讨论】:

  • " 如果 operator new 失败,则返回 0" - 仅当您调用 operator 的 no throw 实现时,否则它会抛出 std::bad_alloc
【解决方案2】:

操作系统会为您提供尽可能多的内存,直到您的进程的地址空间已满。它不会在物理内存用完时停止。

这意味着无法通过分配内存来计算您的计算机有多少物理内存,即使您的计算机的物理内存不足,分配也不会失败。后一个属性可以让您从一开始就寻找物理内存的负担中解脱出来。

【讨论】:

    【解决方案3】:

    您可以尝试调用 Windows API 并使用 GlobalMemoryStatusEx 函数询问有多少可用内存。更多详情请看这里:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 2014-02-06
      • 2016-11-23
      • 2011-01-18
      • 2018-03-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多