Tinux 3.0 内存对齐算法
最近在研讀“Tiniux”操作系統(tǒng)源代碼,在內存分配中看見如下代碼:
#define OSMEM_ALIGN_SIZE(size) (((size) + OSMEM_ALIGNMENT - 1) & ~(OSMEM_ALIGNMENT-1))百思之后恍悟,故記錄如下:
1、功能:對待分配的字節(jié)大小“size”按照“OSMEM_ALIGNMENT?”進行對齊,一般OSMEM_ALIGNMENT?為4(可更改)。
2、栗子:
(1)當 size = 2 時,為了保證內存對齊,需要分配 4B 內存,即:額外再分配 2B 。計算過程如下:
size +?OSMEM_ALIGNMENT - 1 = 5,5?& ~(OSMEM_ALIGNMENT - 1) = 101b & ~(3) = 101b & 100b = 4,滿足要求。
(2)當 size = 6 時,需要分配 8B 內存,即:額外再分配 2B 。計算過程如下:
size + OSMEM_ALIGNMENT - 1 = 9, 9 & ~(OSMEM_ALIGNMENT ?- 1) = 101b & ~ (3) = 101b & 100b = 8,滿足要求。
3、本質:
(1)因為內存對齊的緣故,地址都是OSMEM_ALIGNMENT的倍數(shù),故地址的低l位都是0,即:取整拋余。
(2)同時,分配的內存至少比申請的內存多,即:比 size 大。size +?OSMEM_ALIGNMENT - 1 的原因是無論size為幾,都可以讓結果恰好增大到離size最近的OSMEM_ALIGNMENT的倍數(shù)的數(shù)。
?
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Tinux 3.0 内存对齐算法的全部內容,希望文章能夠幫你解決所遇到的問題。