malloc 是怎么实现的呢?
有一种做法是直接把进程的内存管理交给操作系统内核去做,直接让程序发起系统调用申请内存。这种做法理论上是可行的,但实际上性能比较差,因为意味着每次申请内存丢需要进行系统调用。
比较好的做法是程序员向操作系统申请了一块适当大小的堆空间,然后有程序自己管理这块空间,而具体来讲,管理堆空间分配的往往就是程序的运行库。运行库相当于向操作系统分配了一块较大的堆空间,然后"零售"给程序员使用。
Linux 下进程堆管理稍微有些复杂,因为它提供了2种堆空间分配方式,即2个系统调用:
brk
mmap
- 一个经典的面试题:malloc一次最大能申请多大空间?
网友评论