使用getrlimit(RLIMIT_MEMLOCK),可以获得进程可以分配的锁定内存的数量(mlock()或mlockall())。在进程中锁定了多少内存
但如何检索当前锁定的内存量?
例如,getrusage()没有返回任何信息。
在Linux下,可以读取/ proc/self/status并从VmLck开始的行中提取锁定的内存量。
是否有一种可移植的方式来检索在Linux,* BSD和其他POSIX兼容系统上工作的锁定内存量?
使用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"
}
更短的格式:FILE * fp = fopen(“/ proc/self/status”,“r”); – milton 2012-09-25 21:32:32
POSIX指定如果未实施调用,则对于mlock和mlockall的调用将失败并显示ENOSYS。这意味着没有保证便携式界面的锁定/解锁,在可保证实施的意义上便携。也。没有POSIX指定的方法来枚举进程内存的锁定页面。 – 2011-04-25 18:22:36