使用 getrlimit(RLIMIT_MEMLOCK),可以获得进程可以分配的允许的锁定内存量(mlock() 或 mlockall())。
但是如何检索当前锁定的内存量?
例如,getrusage() 没有返回任何信息。
在 Linux 下,可以读取 /proc/self/status 并从以 VmLck 开头的行中提取锁定的内存量。
是否有一种可移植的方法来检索可在 Linux、*BSD 和其他 POSIX 兼容系统上运行的锁定内存量?
您可能需要检查每个系统并相应地实施它。在 Linux 上:
cat /proc/$PID/status | grep VmLck
您可能需要在 C 中执行相同操作(/proc
逐行读取并搜索VmLck
),因为此信息是在我认为您无法直接访问的函数task_mem
(在array.c中)中创建的。就像是:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
char cwd[PATH_MAX];
sprintf(cwd, "/proc/%d/status", getpid());
FILE* fp = fopen(cwd, "r");
if(!fp) {
exit(EXIT_FAILURE);
}
while((read = getline(&line, &len, fp)) != -1) {
// search for line starting by "VmLck"
}