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为倍数对齐的吗?内核分配内存的对齐规则是什么样的呢?