Вот что я нашел:
`
---> /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
. Но только описывает, какие поля он занимает. Не показывает, как получить эти поля.