1、malloc和mmap分属于不同的内存区域。
1)malloc/free的内存位于Heap堆空间,多用于小内存的申请释放。
在glibc库中有一层复杂的内存管理机制。用于维护申请释放的内存。当[heap]中的内存空间不够时,会调用brk系统调用,为Heap区域向上扩展内存。
用户free释放内存后,如果heap区域顶端有连续超过128KB的空闲内存,则调用trim系统调用执行内存紧缩(默认128KB,可通过 M_TRIM_THRESHOLD 选项调节)。
当申请内存大于128K时,malloc接口会选择调用mmap来实现。
2)mmap的虚拟内存空间位于Memory Mapping Segement,多用于大块内存的申请释放。mmap至少会分配128KB的内存地址。
https://zhuanlan.zhihu.com/p/670532733
X64的用户空间分布如下:
查看一个进程的内存映射拓扑如下(cat /proc/$pid/maps):
[heap]和[stack]空间都有显示,.so都位于[mmap]空间。