wuoy5bba43z64011337038.gif
& ]' T) A; D! U7 b' O1 J
点击上方蓝色字体,关注我们
3 q3 j" ^2 f) M; W- I2 r. ~0 x
/ U S8 A% O0 S过程说明如下:5 w+ ~: |& K* J8 g$ [
(1)、此时内存堆还没有经过任何操作,为全新的。
$ ]2 b& ~, V" U: j0 a& h(2)、此时经过第一次内存分配,一共分出去了 4 块内存块,大小分别为 80B、80B、10B 和100B。
" L/ |! M: d3 K(3)、有些应用使用完内存,进行了释放,从左往右第一个 80B 和后面的 10B 这两个内存块就是释放的内存。如果此时有个应用需要 50B 的内存,那么它可以从两个地方来获取到,一个是最前面的还没被分配过的剩余内存块,另一个就是刚刚释放出来的 80B 的内存块。但是很明显,刚刚释放出来的这个 10B 的内存块就没法用了,除非此时有另外一个应用所需要的内存小于 10B。 9 ]' t- h! i& K, \! ~
(4)、经过很多次的申请和释放以后,内存块被不断分割、最终导致大量很小的内存块。也就是图中 80B 和 50B 这两个内存块之间的小内存块,这些内存块由于太小导致大多数应用无法使用,这些没法使用的内存块就沦为了内存碎片。% c0 y+ i# A, }2 W, l& v0 ]/ ]" F
6 z$ S; P( c: Z9 g/ W- @内存碎片是内存管理算法重点解决的一个问题,否则的话会导致实际可用的内存越来越少,最终应用程序因为分配不到合适的内存而崩溃,所以我们需要一个优良的内存分配算法来避免这种情况的出现。 : \: _/ r3 i4 [% Q
! x& F6 k: n8 }$ Q2 D5 O9 W: S* {
ctfk50vonx564011337138.png
. C) w- a; C+ K) @往期推荐详解CAN总线:CAN总线通信优先级机制
( ]1 v, P' x. GLabVIEW实现Modbus通信
; L4 A5 \! v! Y4 v9 m% JLabVIEW实现PCB电路板坐标定位(实战篇—2)) }8 @$ Z; [8 Q8 C3 Y
如何设计电桥传感器驱动电路?% t/ i M2 t7 i7 t
RS485通信如何设计emc电路?/ K: R6 V* H2 _7 r: f& e
6 S' u. j6 X3 t0 u: F+ E
mxseonojv5064011337238.jpg
6 ]1 j1 K! \- K; I" T- J3 r
ala3x0z4vis64011337338.gif
% V$ p" c1 c- R2 R9 X2 Z, _
点击阅读原文,更精彩~ |