【问题标题】:Checking the amount of available RAM within a running program检查正在运行的程序中的可用 RAM 量
【发布时间】:2009-06-26 10:26:41
【问题描述】:

我的一个朋友在一次工作面试中被要求编写一个程序来测量可用 RAM 的数量。预期的答案是以二进制搜索方式使用malloc():分配越来越大的内存部分直到收到失败消息,减小部分大小,并对分配的内存量求和。

我相信这种方法将测量虚拟内存量,而不是物理内存量。但是我对这件事很好奇。

有没有办法在不使用exec(dmesg |grep -i memory) 的情况下从程序中得知可用 RAM 的数量?

【问题讨论】:

  • 对于每日 FTW 来说,这听起来像是一个不错的面试故事。
  • 听起来像是一个测试面试者对一般内存管理知识的问题——虚拟内存等
  • 不过,这是一个不错的选择。它测试操作系统和内存管理知识以及创造力。一个人可以在不了解内存管理的情况下提出解决方案。

标签: memory malloc


【解决方案1】:

您是对的:malloc() 不区分物理内存或虚拟内存。事实上,这就是虚拟内存的全部意义所在:让这些细节与程序无关。

您可以找到,但它是特定于操作系统的。例如,Linux

【讨论】:

  • 谢谢。 procfs 中有一些很好的信息 - 取决于操作系统,但非常有用。
【解决方案2】:

这样做的唯一方法是使用一些特定于操作系统的功能。使用 malloc() 无用的原因有很多:

  • 它测量虚拟内存
  • 操作系统很可能对每个进程的内存分配有上限
  • 分配比物理可用内存多得多的内存通常会使平台稳定性降低到问题中建议的“返回一个”算法可能不起作用的程度

【讨论】:

    【解决方案3】:

    这是特定于操作系统的,除非您想创建自己的内存管理层,否则您应该从操作系统服务中收集此类信息

    【讨论】:

      【解决方案4】:

      使用 malloc() 只会告诉您可以为单个进程分配多少内存。这可能是低于虚拟内存总量的原因。例如,您可能有操作系统配额或每进程 32 位限制的地址空间。

      (当然还有虚拟内存 >= RAM)

      【讨论】:

        【解决方案5】:

        非常特定于操作系统,但对于 Linux,有关系统内存的信息位于 /proc/meminfo。您也可以使用 sysctl 接口 (http://www.linuxjournal.com/article/2365) 在 C 程序中获取这些数据。

        【讨论】:

          猜你喜欢
          • 2011-03-02
          • 2012-10-06
          • 1970-01-01
          • 2015-12-26
          • 1970-01-01
          • 1970-01-01
          • 2011-06-10
          • 1970-01-01
          • 2018-07-16
          相关资源
          最近更新 更多