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

问题描述:

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

+1

读取/ proc中的伪文件。他们有一个联机帮助。 – 2014-10-17 18:15:44

+1

可能的重复,取决于您希望系统级还是特定于进程的信息:[如何在运行时使用C++获取内存使用量](http://*.com/q/669438/464709) – 2014-10-17 18:19:39

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

valgrind foo 

则会在跟踪内存使用的线束运行程序,并打印出信息的程序结束之后。

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

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

从一个过程中,您可以使用/proc/self/maps/proc/self/smaps查询其的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 

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

要知道,(使用newdeletemallocfree使用像mmap(2)系统调用往往要求空间(从内核),但先前管理-d free内存重用,所以往往不释放内存回到内核​​munmap。在C memory management上阅读wikipage。换句话说,使用的堆在进程外不可访问(因为某些未使用,但对未来可重复使用malloc-s,内存仍为mmap -ed)。另见mallinfo(3)malloc_stats(3)。使用valgrind来检测内存泄漏。

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