电子产业一站式赋能平台

PCB联盟网

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

什么是内存碎片?

[复制链接]

854

主题

854

帖子

8398

积分

高级会员

Rank: 5Rank: 5

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

5jgn1y0qmti64023061639.gif

5jgn1y0qmti64023061639.gif
) }# b5 T/ A7 o! K1 Z. f
点击上方蓝色字体,关注我们# ^% i+ Y' [/ J# @4 U9 W2 X1 L

2 J1 W* @' \8 O6 e9 o9 B4 C过程说明如下:
4 ^  L( \# z( G( \# w  }* k(1)、此时内存堆还没有经过任何操作,为全新的。
, c, c# `  u" b. n; J4 H' w3 s(2)、此时经过第一次内存分配,一共分出去了 4 块内存块,大小分别为 80B、80B、10B 和100B。
/ H% m& }& `. k7 h8 q# e$ J( B(3)、有些应用使用完内存,进行了释放,从左往右第一个 80B 和后面的 10B 这两个内存块就是释放的内存。如果此时有个应用需要 50B 的内存,那么它可以从两个地方来获取到,一个是最前面的还没被分配过的剩余内存块,另一个就是刚刚释放出来的 80B 的内存块。但是很明显,刚刚释放出来的这个 10B 的内存块就没法用了,除非此时有另外一个应用所需要的内存小于 10B。
' \! h+ D  i/ G: r9 j% Z(4)、经过很多次的申请和释放以后,内存块被不断分割、最终导致大量很小的内存块。也就是图中 80B 和 50B 这两个内存块之间的小内存块,这些内存块由于太小导致大多数应用无法使用,这些没法使用的内存块就沦为了内存碎片。3 W6 q9 F# d$ t5 }  \7 ]1 Q, O5 r
7 [5 q& q* C3 D% b& P4 Y' s; ~
内存碎片是内存管理算法重点解决的一个问题,否则的话会导致实际可用的内存越来越少,最终应用程序因为分配不到合适的内存而崩溃,所以我们需要一个优良的内存分配算法来避免这种情况的出现。
3 o. T$ o9 ~8 q3 H# o' i* Y, _5 I7 t
" l4 W3 n& q* Z/ C: t+ J8 [( ~, [

tt2hq0o2sgl64023061739.png

tt2hq0o2sgl64023061739.png
4 k% {3 D. v1 S  S4 X( n" u, [% C
往期推荐详解CAN总线:CAN总线通信优先级机制
" J& p# W$ [4 W. E3 sLabVIEW实现Modbus通信
, C0 H/ A4 f0 s$ w) l' H, K: xLabVIEW实现PCB电路板坐标定位(实战篇—2)7 D0 P5 {2 a, v2 x+ B
如何设计电桥传感器驱动电路?
( g9 V& I" h; h7 k( }RS485通信如何设计emc电路?. c# X# S- v  E+ `) u
( _6 u) I! d5 _2 ]# `3 e6 o. k

nuciyqefhi364023061839.jpg

nuciyqefhi364023061839.jpg
# l; e. x! ?* F( T5 Q9 B! G& s' z

24tvkta0jwf64023061939.gif

24tvkta0jwf64023061939.gif

; s0 b0 X7 u* f+ {7 D, S点击阅读原文,更精彩~
回复

使用道具 举报

发表回复

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

本版积分规则


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