Wygłupiam się, czytając o niskopoziomowych funkcjach, których nie rozumiem, i dotarłem do sbrk(2)
.
Napisałem prosty programik sprawdzający, jak można (a raczej nie można, bo robię coś źle) alokować pamięci za pomocą tej funkcji:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("%p\n", sbrk(0)); // Wypisz obecną granicę pamięci procesu
sbrk(sizeof(int)); // Powiększ ją by alokować pamięć na 1 inta
printf("%p\n", sbrk(0)); // Wypisz granicę pamięci po tej alokacji
sbrk(-((intptr_t)sizeof(int))); // Zwolnij pamięć na tego inta
printf("%p\n", sbrk(0)); // Wypisz granicę po tym zwolnieniu (powinno być tak jak przed alokacją??)
}
Wypisuje mi się na przykład:
0x160a000
0x162b004
0x162b000
Nie pojęte. sizeof(int)
to u mnie 4. więc rozumiem przejście z 0x162b004
do 0x162b000
. ALE CZEMU alokacja na 1 inta spowodowała skok aż o 0x1004 bajtów?? 0x160a000
->0x162b004
Przecież wywołałem sbrk(sizeof(int))
a nie sbrk(401*sizeof(int))
!!