Я пишу приложение на AIX 5.3, используя C ++. Я хочу получить текущий размер виртуальной памяти процесса. я использую getprocs64
функция, но с этими данными я не могу получить результат как svmon
показывает.
Пожалуйста, помогите мне.
Благодарю.
Я нашел частично решение, которое подходит для меня.
Я запустил небольшое тестовое приложение и вижу, что 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
в байтах.
Я надеюсь, что это решение может кому-то помочь 🙂
Других решений пока нет …