如何计算碎片?

Big*_*hne 10 c embedded memory-management fragmentation

想象一下,你有一些内存包含一堆字节:

++++ ++-- ---+ +++-
-++- ++++ ++++ ----
---- ++++ +
Run Code Online (Sandbox Code Playgroud)

让我们说+分配的-手段和免费手段.

我正在寻找如何计算碎片百分比公式.

背景

我正在为具有静态内存的嵌入式设备实现一个微小的动态内存管理.我的目标是拥有一些可用于存储少量数据的东西.大多数是通过无线连接传入的数据包,每个数据包大约128字节.

psm*_*ars 7

正如R.所说,它完全取决于"碎片百分比"的含义 - 但您可以使用的一个简单公式是:

(free - freemax)
----------------   x 100%    (or 100% for free=0)
    free
Run Code Online (Sandbox Code Playgroud)

哪里

free     = total number of bytes free
freemax  = size of largest free block
Run Code Online (Sandbox Code Playgroud)

这样,如果所有内存都在一个大块中,则碎片为0%,如果内存全部被分成数百个小块,则接近100%.


Nic*_*not 6

计算当前内存布局中可容纳的128字节数据包数.让那个数字n.

计算在内存布局中可以容纳多少128个字节的数据包,分配的字节数与当前数据包相同,但没有空洞(例如,将所有+向左移动).让那个数字N.

你的"碎片比率"是alpha = n/N.