什么是内存碎片?

2023-09-20 20:58:39

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

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

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

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

过程说明如下:

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

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

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

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

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

 

更多推荐

(五)kafka从入门到精通之topic介绍

1、kafka简介Kafka是一个流行的分布式消息系统,它的核心是一个由多个节点组成的分布式集群。在Kafka中,数据被分割成多个小块,并通过一些复杂的算法在节点之间传递。这些小块被称为KafkaTopic。2、topic知识一个Topic是一组具有相同主题的消息。可以将Topic看作是一个数据仓库,在这个仓库中存储着

【Hash表】判断有没有重复元素-力扣 217

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

ETHERCAT转ETHERCAT协议网关

JM-ECAT-ECAT产品介绍JM-ECAT-ECAT是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将2个ETHERCAT网络连接起来。本网关连接到ETHERCAT总线中做为从站使用。产品参数技术参数l网关做为ETHERCAT网络的从站,可以连接倍福、欧姆龙、基恩士等厂家的PLC。l带2个RJ4

从零开始学习软件测试-第44天笔记

adb命令adb存在于androidsdk中全称:AndroidDebugBridge(安卓调试桥)只适用于android系统adb工作原理由client、server、daemon三部分组成client:运行在电脑中,用来发送adb命令server:运行在电脑中,用来管理client和daemon之间的通信daemo

Twin-Builder—系统级多物理域数字孪生平台

TwinBuilder是ANSYS公司系统仿真业务的核心产品,是一款跨学科多领域系统仿真软件和数字孪生平台。能够实现复杂系统的建模、仿真和验证,基于IIoT物联网平台对数字孪生体进行集成、部署与运行,在完成复杂系统功能、性能的验证和优化的同时,缩短开发时间和降低研发成本,并能够用于故障诊断,系统预测性维护,基于获得的运

苹果删除的照片如何恢复?无法拒绝的3个方法!

热爱摄影的人通常很热爱生活,照片是捕捉事物、人物、风景以及情绪的最佳方式。通过拍照,我们可以留住生活中路过的美好瞬间,所以照片对我们来说是非常有纪念意义的。但有时候可能会因为误操作而删除了一些非常重要的照片。那么苹果手机删除的照片如何恢复?小编教大家3招,帮助你找回那些珍贵的记忆。方法一:从“最近删除”中恢复删除的照片

.动态内存经典题分析(1)

题目:请问运⾏Test函数会有什么样的结果?voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,"helloworld");printf(str);}intmain(){Te

浅谈应急照明系统在民用建筑的设计应用与产品选型

贾丽丽安科瑞电气股份有限公司上海嘉定201801【摘要】应急照明分为备用照明、安全照明及疏散照明。文章介绍了应急照明系统的设计、灯具选择、灯具布置、配电等要求。并结合实例进行疏散照明的计算,以指导应急照明系统的设计与应用。【关键词】照度;光通量;消防应急灯具;A型消防应急照明灯具;消防应急照明和疏散指示系统。引言现代建

【已解决】AttributeError: module ‘numpy‘ has no attribute ‘int‘.

文章目录问题详情问题原因解决方法专栏目录:神经网络精讲与实战AlexNetVGGNetGoogLeNetInceptionV2——V4ResNetDenseNetSE-ResNet问题详情AttributeError:module‘numpy’hasnoattribute‘int’.np.intwasadeprecat

策略模式实现方式之Map<K,Function>

策略模式实现方式之Map<K,Function>小概念场景我们有一个对象对象有一个行为该行为在不同场景中有不同的表现形式策略模式定义了一系列算法封装了每个算法这一系列的算法可互换代替代码实现定义一个对象行为表现形式枚举//定义一个对象行为表现形式枚举publicenumAdApplyTypeEnumimplements

Spark Dataset 快速上手

文章首发地址SparkDataset是Spark提供的一种强类型的数据抽象,它结合了RDD的强大功能和DataFrame的优化执行。下面是SparkDataset的JavaAPI的详细解释:创建Dataset:使用spark.createDataset()方法:通过调用spark对象的createDataset()方法

热文推荐