Izz*_*zzo 6 c linux system-calls
为什么 malloc() 被视为标准 C 库函数而不是系统调用?操作系统似乎负责处理所有内存分配请求。
当然可以将andmalloc作为系统调用来实现free,但很少这样做。
系统调用是对操作系统内核的调用。例如,在 POSIX 系统(Linux、UNIX...)上,read和write是系统调用。当 C 程序调用 时read,它可能会调用一个包装器,该包装器会执行向内核发出请求所需的任何操作,然后将结果返回给调用者。
事实证明,进行内存管理的最有效方法是使用较低级别的系统调用(请参阅brk和sbrk)来扩展当前进程的数据段,然后使用库调用(malloc、free等)来管理该段内的内存。该管理不需要与内核进行任何交互;这只是在当前进程中执行的指针操作。该malloc函数将调用系统调用,例如brk或sbrk如果它需要比当前可用的内存更多的内存,但许多malloc调用根本不需要与内核进行任何交互。
上面的内容是针对 Linux/POSIX/UNIX 系统的。例如,Windows 的细节会有所不同,但总体设计可能相似。
请注意,某些 C 标准库函数通常直接作为系统调用实现。time就是一个例子(但正如 Nick ODell 在评论中指出的那样,time通常可以在不与内核交互的情况下执行调用)。