什么是内存碎片?

在嵌入式系统中,内存是十分有限而且是十分珍贵的,用一块内存就少了一块内存,而在分配中随着内存不断被分配和释放,整个系统内存区域会产生越来越多的碎片。

因为在使用过程中,申请了一些内存,其中一些释放了,导致内存空间中存在一些小的内存块,它们地址不连续,不能够作为一整块的大内存分配出去,所以一定会在某个时间,系统已经无法分配到合适的内存了,导致系统瘫痪。

系统中实际是还有内存的,但是因为小块的内存的地址不连续,导致无法分配成功。

内存碎片产生过程,如下图所示:

过程说明如下:

(1)、此时内存堆还没有经过任何操作,为全新的。

(2)、此时经过第一次内存分配,一共分出去了 4 块内存块,大小分别为 80B、80B、10B 和100B。

(3)、有些应用使用完内存,进行了释放,从左往右第一个 80B 和后面的 10B 这两个内存块就是释放的内存。如果此时有个应用需要 50B 的内存,那么它可以从两个地方来获取到,一个是最前面的还没被分配过的剩余内存块,另一个就是刚刚释放出来的 80B 的内存块。但是很明显,刚刚释放出来的这个 10B 的内存块就没法用了,除非此时有另外一个应用所需要的内存小于 10B。

(4)、经过很多次的申请和释放以后,内存块被不断分割、最终导致大量很小的内存块。也就是图中 80B 和 50B 这两个内存块之间的小内存块,这些内存块由于太小导致大多数应用无法使用,这些没法使用的内存块就沦为了内存碎片。

内存碎片是内存管理算法重点解决的一个问题,否则的话会导致实际可用的内存越来越少,最终应用程序因为分配不到合适的内存而崩溃,所以我们需要一个优良的内存分配算法来避免这种情况的出现。

相关推荐
创龙科技-黄工41 分钟前
解锁4K,Xilinx MPSoC ARM + FPGA高清视频采集与显示方案!
嵌入式开发·xilinx·arm+fpga·工业核心板
邓校长的编程课堂1 天前
基于树莓派Pico和声音传感器实现声控风扇的技术分享
物联网·嵌入式开发·树莓派pico·编程入门·c++编程·声音传感器·c++趣味编程
byte轻骑兵22 天前
ARM 嵌入式处理器内核与架构深度剖析:解锁底层技术逻辑
arm开发·架构·嵌入式开发
Industio_触觉智能22 天前
触觉智能亮相OpenHarmony人才生态大会2024
嵌入式硬件·openharmony·嵌入式开发·开源鸿蒙·鸿蒙开发·触觉智能·原生鸿蒙
The Mr.Nobody23 天前
STM32F4读写SD卡:从读写扇区到FATFS文件系统
物联网·文件系统·嵌入式开发
邓校长的编程课堂24 天前
c++编程&玩转物联网:使用芯片控制8个LED实现流水灯技术分享
c++·物联网·嵌入式开发·树莓派pico·led流水灯·位操作·c++编程实践
Industio_触觉智能25 天前
Android11修改摄像头前后置方法,触觉智能RK3568开发板演示
android·图像处理·开发板·rk3568·嵌入式开发·安卓开发·前置后置摄像头
邓校长的编程课堂25 天前
C++零基础入门:基于树莓派Pico的趣味编程体验
嵌入式开发·树莓派pico·c++编程·信息学奥赛·零基础入门·hello world·编程教育
创龙科技-黄工25 天前
1分钟学会如何提升PCIe通信速率,基于RK3568J + FPGA国产平台!
嵌入式开发·瑞芯微rk3568·arm+fpga·工业核心板
十六宿舍1 个月前
【AUTOSAR 基础软件】CanTp模块详解(Can栈之传输模块)
汽车·autosar·嵌入式开发·etas·基础软件·isolar·can传输层