Сколько памяти заблокировано в процессе - PullRequest
10 голосов
/ 23 апреля 2011

Используя getrlimit (RLIMIT_MEMLOCK), можно получить разрешенный объем заблокированной памяти, которую может выделить процесс (mlock () или mlockall ()).

Но как восстановить заблокированный объем памяти?

Например, getrusage () не возвращает информацию.

В Linux возможно прочитать / proc / self / status и извлечь количество заблокированной памяти из строки, начинающейся с VmLck.

Существует ли портативный способ получения объема заблокированной памяти, который будет работать в Linux, * BSD и других POSIX-совместимых системах?

1 Ответ

3 голосов
/ 26 апреля 2011

Возможно, вам потребуется проверить каждую систему и реализовать ее соответствующим образом. В 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"
}
...