等下次在申请内存的时候,就直接从内存池取出对应的内存块就行了,而且可能这个内存块的虚拟地址与物理地址的映射关系还存在,这样不仅减少了系统调用的次数,也减少了缺页中断的次数,这将大大降低 CPU 的消耗 。
只使用 brk 来分配内存的问题前面我们提到通过 brk 从堆空间分配的内存,并不会归还给操作系统,那么我们那考虑这样一个场景 。
如果我们连续申请了 10k,20k,30k 这三片内存,如果 10k 和 20k 这两片释放了,变为了空闲内存空间,如果下次申请的内存小于 30k,那么就可以重用这个空闲内存空间 。
文章插图
但是如果下次申请的内存大于 30k,没有可用的空闲内存空间,必须向 OS 申请,实际使用内存继续增大 。
因此,随着系统频繁地 malloc 和 free,尤其对于小块内存,堆内将产生越来越多不可用的碎片,导致“内存泄露” 。而这种“泄露”现象使用 valgrind 是无法检测出来的 。
所以,malloc 实现中,充分考虑了 brk 和 mmap 行为上的差异及优缺点,默认分配大块内存 (128KB) 才使用 mmap 分配内存空间 。
【linux 是如何进行内存分配的】
推荐阅读
- 图像描述的视觉关系
- durex是什么意思英文 durex是什么意思
- 领导提拔你,从来不是看努力
- 江珊:我这辈子最正确地决定,就是再婚嫁演员
- “一代国师”跌落神坛,晚节不保,文艺人设竟然都是伪装
- 《灼灼风流》慕灼华有3张王牌,大结局显然是要稳赢了
- 鹊刀门传奇:自古公公好威名!高大毛算什么,曹公公才是反派1号
- 汪字兰的养殖方法和注意事项是什么 汪字兰的养殖方法和注意事项
- 飞蟹怎么储存活的 飞蟹怎么储存
- 肥胖不过是痰湿太重,简单两味药,一消一补,减重42斤!