Вывести максимальный размер данных, кучи и стека в C - PullRequest
0 голосов
/ 23 апреля 2020

Вот что я нашел:
`

---> /proc/[pid]/maps
A file containing the currently mapped memory regions and their access permissions.

The format is:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
08056000-08058000 rw-p 0000d000 03:0c 64593   /usr/sbin/gpm
08058000-0805b000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 03:0c 4165    /lib/ld-2.2.4.so
40013000-40015000 rw-p 00012000 03:0c 4165    /lib/ld-2.2.4.so
4001f000-40135000 r-xp 00000000 03:0c 45494   /lib/libc-2.2.4.so
40135000-4013e000 rw-p 00115000 03:0c 45494   /lib/libc-2.2.4.so
4013e000-40142000 rw-p 00000000 00:00 0
bffff000-c0000000 rwxp 00000000 00:00 0

Я думаю, 08058000-0805b000 это раздел кучи, а 4013e000-40142000 это раздел стека. Если это правда, я пытаюсь получить максимальный размер данных, кучи и стека в моем компьютере. Вот что я уже пробовал:


#include <stdio.h>
#include <stdlib.h>

int main(){

 unsigned long int data;
 unsigned long int size,resident,share,text,lib,dt;

 const char* statm_path = "/proc/self/maps";

 FILE *f = fopen(statm_path,"r");
 if(!f){
   perror(statm_path);
   abort();
 }

 fscanf(f,"%lu %lu %lu %lu %lu %lu %lu", &size, &resident, &share, &text, &lib, &data, &dt);

 fclose(f);

 printf("%lu  %lu  %lu  %lu  %lu  %lu  %lu\n", size, resident, share, text, lib, data, dt);

}

Но вывод: 55 1 94275924715901 140240327764384 0 140725386831016 94275924715824

Я исследовал эту топику c, но не могу найти, как получить размер данные, куча и стек. Все, что я нахожу, это proc/self/maps. Но только описывает, какие поля он занимает. Не показывает, как получить эти поля.

...