因此,malloc不调用任何系统调用吗?

| 相关代码:
  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)
我很惊讶如此低级的操作不涉及syscall?     
已邀请:
        并非每个对malloc的调用都调用一个syscall。在我的Linux桌面上,malloc以128KB的块分配一个空间,然后分配该空间。因此,每100-200个malloc调用我都会看到一个syscall。在freebsd上,malloc按2MB块分配。在您的机器上,编号可能会有所不同。 如果要查看每个malloc上的syscall分配大量内存(malloc(10 * 1024 * 1024 * 1024))     
        您认为brk是什么?在此示例中,malloc绝对在调用系统调用,该系统调用不是\“ malloc \”。     
        malloc()调用系统brk()函数(在Linux / Unix中)-但是仅在本地堆耗尽时才调用它。即大多数malloc实现管理通过brk()获得的内存堆,如果它太小或太零散,它们会通过brk()要求更多。     

要回复问题请先登录注册