如何在Linux系统上获取内存信息?

时间:2014-10-17 18:14:48

标签: c++ linux

如何从Linux系统上的C ++代码中获取总内存,已用内存,可用内存?

2 个答案:

答案 0 :(得分:0)

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

valgrind foo

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

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

答案 1 :(得分:0)

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

在流程内部,您可以使用/proc/self/maps - 和/proc/self/smapsaddress space中查询virtual memory;在该过程之外,对于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 - 内存以重复使用它,因此通常不会使用munmap将内存释放回内核。在C memory management上阅读wikipage。换句话说,使用的堆在进程外是不可访问的(因为一些未使用的,但可重用于将来的malloc - s,内存仍为{{1} } -ed)。另请参阅mallinfo(3)malloc_stats(3)

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

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