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

如何从Linux系统上的C ++代码中获取内存,内存,空闲内存?

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

 valgrind foo 

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

如果你没有安装valgrind ,你应该可以在你的发行版的软件包库中找到它。

就像Chris Stratton所说的那样,你可以在Linux上查询/proc/ so中的很多系统信息read proc(5) ; 其中包含文本伪文件(有点像管道)被顺序读取。 这些不是真正的磁盘文件,所以读取速度非常快。 每次测量都需要打开和关闭它们。

在进程内部,可以使用/proc/self/maps -and /proc/self/smaps查询虚拟内存中的 地址空间 。 在这个过程之外,对于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内存管理的 wikipage。 换句话说,所使用的堆在进程之外是不可访问的(因为一些未被使用的 ,但是对于将来的malloc -s可重用,内存保持mmap -ed)。 另请参阅mallinfo(3)和malloc_stats(3) 。

Justin Lardinois回答说 ,使用valgrind来检测内存泄漏。

高级Linux编程是一本很好的书。 它有几个相关的章节。