8、进程调用free(D)以后,如第二幅图所示:B和D连接起来,变成一块140K的空闲内存 。
9、默认情况下:当最高地址空间的空闲内存超过128K(可由M_TRIM_THRESHOLD选项调节)时,执行内存紧缩操作(trim) 。在上一个步骤free的时候,发现最高地址空闲内存超过128K,于是内存紧缩,变成第三幅图所示 。
如果这个时候我们想要申请一块50K的内存E,就会出现下图的情况 。

文章插图
有没有发现,并没有从中间40K的内存分配,因为不满足我们申请50K大小的要求,而是向下偏移指针_edata分配50K,到这里就能发现就产生了内存碎片,这块碎片正是那40K 。
系统运行的越久,出现上述这样的情况越多,整个系统的小内存就会很多,导致的结果是:查看系统的剩余内存比较可观,但申请大块内存会返回失败 。
【为什么会产生内存碎片?】
推荐阅读
- 电脑为什么会死机?这几点原因需要了解一下
- 腾讯会员怎么取消自动续费
- 说话和对话有什么区别
- 箭毒木为什么叫见血封喉 箭毒木是一种剧毒植物是我们常说的哪种树呢
- 翻译|北大院长姚洋:十年内有3类职业或许会被淘汰,选专业要考虑未来
- 苏亚雷斯|对比一下职业生涯的轨迹,你会发现苏亚雷斯要比莱万精彩得多!
- 企业微信|当你离开办公室时,远程办公真的会影响工作效率吗
- 机械|职场上,为什么工作明明很努力,却得不到重用?因为你不懂这四点
- 杯茶看出你的人际关系
- 冬天开窗户湿度会增加还是降低 梅雨季节开窗会增加湿度吗
