Linux / Windows中的C / C ++内存使用API

我想获得每个进程和系统范围的内存使用信息。 在Windows中,这很容易。 GetProcessMemoryInfo和GlobalMemoryStatusEx可以非常轻松地完成这些工作。 例如,GetProcessMemoryInfo给出给定进程的“PeakWorkingSetSize”。 GlobalMemoryStatusEx返回系统可用内存。

不过,我需要在Linux上完成。 我试图find相当于GetProcessMemoryInfo和GlobalMemoryStatusEx的Linux系统API。

我发现'getrusage'。 然而,struct rusage中的最大'ru_maxrss'(驻留集大小)仅为零,这不被执行。 另外,我不知道要获得全系统的空闲内存。

目前的解决方法,我使用的是“系统(”ps -p%my_pid -o vsz,rsz“);”。 手动logging到文件。 但是,处理数据很脏,不方便。

我想知道一些奇特的Linux API用于这个目的。

Solutions Collecting From Web of "Linux / Windows中的C / C ++内存使用API"

你可以看到它是如何在libstatgrab中完成的。
你也可以使用它(GPL)

Linux有一个(模块化的)文件系统接口,用于从内核中获取这些数据,因此几乎可以被任何语言或脚本工具使用。

内存可能很复杂。 有程序可执行文件本身,大概是mmap()被编入共享库。 堆栈利用率。 堆利用率。 驻留在RAM中的部分软件。 部分换出。 等等。


“PeakWorkingSetSize”究竟是什么? 这听起来像是最大驻留集大小(进程使用的最大非交换物理内存RAM)。

虽然它也可能是整个过程的总虚拟内存占用量(内存和交换部分的总和 )。


不管在Linux下,你都可以通过一个进程来看看它的内核级别的交互。 “ps”从/ proc / $ {PID} / *文件中获取数据。

我建议你猫/ proc / $ {PID} /状态 。 Vm *行非常有用。

具体来说: VmData是指进程堆利用率。 VmStk是指进程堆栈利用率。

如果你继续使用“ps”,你可能会考虑popen()


我不知道要获得全系统的可用内存。

总是有/ usr / bin / free

请注意,Linux将利用未使用的内存缓冲文件和缓存…因此, +/-缓冲区/缓存线。