malloc () вызывает системную функцию brk () (в Linux / Unix) - но она вызывает ее только в том случае, если локальная куча исчерпана. То есть Большинство реализаций malloc управляют кучей памяти, получаемой с помощью brk (), и, если она слишком мала или слишком фрагментирована, они запрашивают больше с помощью brk ().
нный код:
write(-1, "test", sizeof("test"));
void * p = malloc(1024);
void * p2 = malloc(510);
write(-1, "hi", sizeof("hi"));
Связанный выход strace:
write(4294967295, "test\0", 5) = -1 EBADF (Bad file descriptor)
brk(0) = 0x601000
brk(0x622000) = 0x622000
write(4294967295, "hi\0", 3) = -1 EBADF (Bad file descriptor)
Я удивлен, что такая операция на низком уровне не связана с системным вызовом?