【问题标题】:How to get memory information on Linux system?如何获取Linux系统的内存信息?
【发布时间】:2014-10-17 18:14:47
【问题描述】:

如何在 Linux 系统上从 C++ 代码中获取总内存、已用内存、空闲内存?

【问题讨论】:

标签: c++ linux


【解决方案1】:

通过valgrind 运行您的程序。对于名为foo 的程序,例如:

valgrind foo

它将在跟踪内存使用情况的工具中运行程序,并在程序终止后打印出该信息。

如果您由于某种原因没有安装valgrind,您应该能够在您的发行版的包存储库中找到它。

【讨论】:

    【解决方案2】:

    正如Chris Stratton 所评论的,您可以-on Linux- 在/proc/ 中查询很多系统信息,因此请阅读proc(5);其中包含要按顺序读取的文本伪文件(有点像管道)。这些不是真正的磁盘文件,因此读取速度非常快。您需要在每次测量时打开和关闭它们。

    在进程内部,您可以使用/proc/self/maps - 和/proc/self/smapsvirtual memory 中查询它的address space;在该进程之外,对于 pid 1234 的另一个进程,使用 /proc/1234/maps/proc/1234/smaps;您可以通过/proc/meminfo获取系统范围的内存信息

    所以在终端中尝试以下命令:

    cat /proc/meminfo
    cat /proc/$$/maps
    cat /proc/$$/smaps
    cat /proc/self/maps
    

    更多地了解他们可以给你什么。

    请注意mallocfree(由newdelete 使用)经常使用诸如mmap(2) 之类的系统调用(从内核)请求空间,但之前管理的是free-d 内存到重用它,因此通常不要使用munmap 将内存释放回内核。阅读C memory management 上的维基页面。换句话说,used 堆在进程之外是不可访问的(因为一些 unused,但可以在将来重复使用malloc-s,内存仍然是mmap-ed) .另见mallinfo(3)malloc_stats(3)

    作为Justin Lardinois answered,使用valgrind检测内存泄漏。

    Advanced Linux Programming 是一本好书。它有几个相关的章节。

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2014-06-12
      • 1970-01-01
      • 2015-07-20
      • 2012-06-01
      • 1970-01-01
      • 2018-06-07
      • 2012-05-07
      • 2011-03-07
      相关资源
      最近更新 更多