Tinux 3.0 内存对齐算法

#define OSMEM_ALIGN_SIZE(size) (((size) + OSMEM_ALIGNMENT - 1) & ~(OSMEM_ALIGNMENT-1))

百思之后恍悟,故记录如下:

1、功能:对待分配的字节大小“size”按照“OSMEM_ALIGNMENT ”进行对齐,一般OSMEM_ALIGNMENT 为4(可更改)。

2、栗子

(1)当 size = 2 时,为了保证内存对齐,需要分配 4B 内存,即:额外再分配 2B 。计算过程如下:

sizeOSMEM_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的倍数,故地址的低l位都是0,即:取整抛余。

(2)同时,分配的内存至少比申请的内存多,即:比 size 大。sizeOSMEM_ALIGNMENT - 1 的原因是无论size为几,都可以让结果恰好增大到离size最近的OSMEM_ALIGNMENT的倍数的数。

 

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部