之前一直以为malloc函数调用就是从操作系统的虚拟内存中的堆中分配内存,malloc应该是一个系统调用函数吧,直到看到一本书《程序员的自我修行》中关于堆中内存的分配提到malloc函数是从运行时库中找到合适的内存块返回,如果运行时库中没有在向操作系统中申请。所以我知道我掌握的关于内存分配的地方有断档的地方。所以抽出时间查找了大量的资料补充了这部分的空缺。
结论:malloc()函数----------运行时库中内存管理器-------------操作系统虚拟内存。
1,c语言运行时库:
之前我一直因为操作系统提供的系统调用接口(api)+c标准库 就叫c运行时库。现在想想很可笑,c语言运行时库是用c标准库开发出一套程序运行所需要的函数,供操作系统运行程序时候使用。这些函数应该会屏蔽不同操作系统的差异。然后不同的操作系统也会提供一些系统调用,为了方便程序可以更多的获取系统资源。所以我们开发的时候只需要关注c标准库和不同操作系统的系统调用。运行时库会有不同系统版本的编译器提供。
2,ptmalloc内存管理器
ptmalloc是glibc默认的内存管理器,就是说它是c运行时库内的内存管理器。它的机制就是自己维护了一个内存池。详细的ptmalloc实现可参考https://blog.csdn.net/initphp/article/details/50833036.