所以malloc不会调用任何系统调用?

cpu*_*uer 6 malloc system-calls

相关代码:

  write(-1, "test", sizeof("test"));
  void * p = malloc(1024);
  void * p2 = malloc(510);
  write(-1, "hi", sizeof("hi"));
Run Code Online (Sandbox Code Playgroud)

相关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)
Run Code Online (Sandbox Code Playgroud)

我很惊讶这种低级操作不涉及系统调用?

小智 19

并非每次调用malloc都会调用一个系统调用.在我的linux桌面上,malloc在128KB块中分配一个空间,然后分配空间.所以每100-200个malloc调用我会看到一个系统调用.在freebsd上,malloc按2MB块分配.在您的机器上,数字可能会有所不同

如果你想在每个malloc上看到syscall分配大量内存(malloc(10*1024*1024*1024))


Log*_*ldo 3

你认为brk是什么?在此示例中,malloc 绝对是在调用系统调用,该系统调用不是“malloc”。