получить размер виртуальной памяти процесса в AIX в программе

Я пишу приложение на AIX 5.3, используя C ++. Я хочу получить текущий размер виртуальной памяти процесса. я использую getprocs64 функция, но с этими данными я не могу получить результат как svmon показывает.
Пожалуйста, помогите мне.

Благодарю.

0

Решение

Я нашел частично решение, которое подходит для меня.

Я запустил небольшое тестовое приложение и вижу, что pi_dvmчлен procentry64 структура, увеличится, если мы выделим память на стек (например: char arr[1024];) для размера выделенного объекта и некоторых накладных расходов. Нет, мы хотим рассчитать размер используемой кучи. Мы должны использовать mallinfo() функция от malloc.h это возвращает mallinfo структура. Мы заинтересованы в двух областях mallinfo состав: usmblks а также uordblks (об этих полях вы могли прочитать Вот). Пример кода:

pid_t pid = getpid();
struct procentry64 p_info;
if (getprocs64(&p_info, sizeof(p_info), NULL, 0, &pid, 1) < 0) {
printf("Error!");
}
proc_size = p_info.pi_dvm*getpagesize() + p_info.pi_tsize;
struct mallinfo m = mallinfo();
proc_size += m.usmblks + m.uordblks;
return proc_size; // proc_size in bytes

Постскриптум Я не знаю, почему мы суммируем pi_tsize (если кто-нибудь знает, пожалуйста, сообщите нам). Я понял эту идею pg_top источники, но есть ошибка, они умножаются pi_tsize на 4, но это неверно, потому что pi_tsize в байтах.
Я надеюсь, что это решение может кому-то помочь 🙂

0

Другие решения

Других решений пока нет …