电子产业一站式赋能平台

PCB联盟网

搜索
查看: 221|回复: 0
收起左侧

什么是内存碎片?

[复制链接]

1001

主题

1001

帖子

8807

积分

高级会员

Rank: 5Rank: 5

积分
8807
发表于 2023-9-21 12:00:00 | 显示全部楼层 |阅读模式

lvl1hgdq0ql64015934246.gif

lvl1hgdq0ql64015934246.gif

8 n# a- H( @6 N' J: b; R点击上方蓝色字体,关注我们( u& Z: L9 X8 t4 |5 h8 d8 ?
! l6 G$ O( q( G0 L" }
过程说明如下:
1 z) G  r9 G: t3 e7 E! O- F(1)、此时内存堆还没有经过任何操作,为全新的。! k5 H* J5 O2 Q$ M) x# e
(2)、此时经过第一次内存分配,一共分出去了 4 块内存块,大小分别为 80B、80B、10B 和100B。
4 K5 V$ f% G" B  t% a(3)、有些应用使用完内存,进行了释放,从左往右第一个 80B 和后面的 10B 这两个内存块就是释放的内存。如果此时有个应用需要 50B 的内存,那么它可以从两个地方来获取到,一个是最前面的还没被分配过的剩余内存块,另一个就是刚刚释放出来的 80B 的内存块。但是很明显,刚刚释放出来的这个 10B 的内存块就没法用了,除非此时有另外一个应用所需要的内存小于 10B。
  l- `( e* _6 y& @, T8 D(4)、经过很多次的申请和释放以后,内存块被不断分割、最终导致大量很小的内存块。也就是图中 80B 和 50B 这两个内存块之间的小内存块,这些内存块由于太小导致大多数应用无法使用,这些没法使用的内存块就沦为了内存碎片。
' u1 T4 F: h$ D/ l1 \0 z* {& \. t( u# t8 c4 p3 H4 m
内存碎片是内存管理算法重点解决的一个问题,否则的话会导致实际可用的内存越来越少,最终应用程序因为分配不到合适的内存而崩溃,所以我们需要一个优良的内存分配算法来避免这种情况的出现。
' J8 x/ U, E4 G& z- c- U; C+ R$ a  H3 b. P" q' ]  Q& t. [

uvdqlsu034a64015934346.png

uvdqlsu034a64015934346.png
* o% n% B! M* {" \- }* V7 O' m
往期推荐详解CAN总线:CAN总线通信优先级机制
( K6 `2 G/ y# VLabVIEW实现Modbus通信1 f6 ~. Q% ?7 R, `: W( W
LabVIEW实现PCB电路板坐标定位(实战篇—2)' ]; e% F: m$ |9 |6 X
如何设计电桥传感器驱动电路?+ E4 u# H' H& a2 y3 w/ Z: k
RS485通信如何设计emc电路?& J( a9 x' e( D( F6 ]# w9 R
+ c, \1 Y+ d* C) H: P5 r' U

cnnc0b5mirk64015934446.jpg

cnnc0b5mirk64015934446.jpg
4 f/ x3 L1 f9 E; v

5ypispihhjw64015934546.gif

5ypispihhjw64015934546.gif

; f1 l. B) o6 _2 B+ O7 K: {0 e点击阅读原文,更精彩~
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表