您好,匿名用户
随意问技术百科期待您的加入

LInux内核地址分配对齐的规则

0 投票

hi all,
今天看《TCP/IP实现》的时候看到这个一个宏

dtom

,它是用

mbuf

中的一个成员指针来获取这个结构的起始地址的,这个结构的大小是MSIZE,MSIZE的值是128.于是

dtom

定义为

#define dtom(m) ((struct mbuf*) ((int)(x) & ~(MSIZE-1)))

该书说之所以可以这么获取是因为MSIZE是2的幂而且内核存储器分配器总是为mbuf分配连续的MSIZE字节的存储块,所以dtom仅仅清除地址的低位字节来获取这个地址。
问题是,这种假设应该只有当分配的地址符合M-M1000000(二进制)的时候才满足吧,难道这个地址是以128为倍数对齐的吗?内核分配内存的对齐规则是什么样的呢?

用户头像 提问 2014年 2月9日 @ 切糕 上等兵 (151 威望)
分享到:

1个回答

0 投票

1.这个宏其实就是一个去掉低位的宏,也就是说总会返回这个结构体mbuf中成员变量的首地址,比如说mbuf中有一个指针ptr的地址是0x00000088,那么通过这个宏取得的地址就是0x00000080。具体关于mbuf的字节对齐大小你去查查资料。
2.还有就是这个跟内核分配内存关系不大
内核分配内存是以4K为大小分配的,也就是一个页的大小。

用户头像 回复 2014年 2月9日 @ Wukong 上等兵 (475 威望)
提一个问题:

相关问题

0 投票
1 回复 43 阅读
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Talon 上等兵 (294 威望)
0 投票
1 回复 33 阅读
0 投票
1 回复 48 阅读
用户头像 提问 2012年 12月1日 @ Aries 上等兵 (238 威望)
0 投票
1 回复 37 阅读
用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...