Я пытаюсь понять, как происходит динамическое выделение памяти. Поэтому я подумал о реализации собственного malloc, используя sbrk()
системный вызов. Мой вопрос здесь в том, что когда я пытаюсь выделить динамическую память, sbrk () и malloc () не непрерывно возвращают разные адреса.
Вот мой код
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
printf("\nsbrk(0) %llu ",(unsigned long long)sbrk(0));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nsbrk(8) %llu ",(unsigned long long)sbrk(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\n");
return 0;
}
Вывод приведенного выше кода
sbrk(0) 30306304
malloc(8) 30306320
malloc(8) 30306352
sbrk(8) 30441472
malloc(8) 30306384
malloc(8) 30306416
Может ли кто-нибудь объяснить, почему sbrk(8)
не является непрерывным местоположением.
mmap
, а неsbrk
. - person Some programmer dude   schedule 22.05.2019printf
формат для печати указателя (void *
) -"%p"
. - person Some programmer dude   schedule 22.05.2019