如何从Linux系统上的C ++代码中获取总内存,已用内存,可用内存?
答案 0 :(得分:0)
通过valgrind
运行您的程序。对于名为foo
的程序,例如:
valgrind foo
它将在线束中运行程序,以跟踪内存使用情况,并在程序终止后打印出该信息。
如果由于某种原因没有安装valgrind
,您应该可以在发行版的软件包存储库中找到它。
答案 1 :(得分:0)
如Chris Stratton所述,您可以 - 在Linux中查询/proc/
中的大量系统信息,因此请阅读proc(5);其中包含要按顺序读取的文本伪文件(有点像管道)。这些不是真正的磁盘文件,因此可以非常快速地读取。您需要在每次测量时打开和关闭它们。
在流程内部,您可以使用/proc/self/maps
- 和/proc/self/smaps
在address 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
了解更多可以给你的东西。
请注意malloc
和free
(由new
和delete
使用)经常使用mmap(2)之类的系统调用请求空间(来自内核)但是管理以前free
- 内存以重复使用它,因此通常不会使用munmap
将内存释放回内核。在C memory management上阅读wikipage。换句话说,使用的堆在进程外是不可访问的(因为一些未使用的,但可重用于将来的malloc
- s,内存仍为{{1} } -ed)。另请参阅mallinfo(3)和malloc_stats(3)。
作为Justin Lardinois answered,使用valgrind来检测内存泄漏。
Advanced Linux Programming是一本值得阅读的好书。它有几个相关的章节。