Big*_*hne 10 c embedded memory-management fragmentation
想象一下,你有一些内存包含一堆字节:
++++ ++-- ---+ +++-
-++- ++++ ++++ ----
---- ++++ +
Run Code Online (Sandbox Code Playgroud)
让我们说+分配的-手段和免费手段.
我正在寻找如何计算碎片百分比的公式.
背景
我正在为具有静态内存的嵌入式设备实现一个微小的动态内存管理.我的目标是拥有一些可用于存储少量数据的东西.大多数是通过无线连接传入的数据包,每个数据包大约128字节.
正如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%.
计算当前内存布局中可容纳的128字节数据包数.让那个数字n.
计算在内存布局中可以容纳多少128个字节的数据包,分配的字节数与当前数据包相同,但没有空洞(例如,将所有+向左移动).让那个数字N.
你的"碎片比率"是alpha = n/N.