转载请注明原地址:http://blog.csdn.net/oyhb_1992/article/details/77043355
例如将某一个地址实现4096字节对齐
——————某4096字节对齐处:如3*4096,4*4096
| |
| |
| |
| |
| |ß(addr)+PAGE_SIZE-1
| |
| |
| |
| |
——————某4096字节对齐处:如2*4096,3*4096 对齐后addr
| |
| |
| |
| |
| |ßaddr 对齐前addr
| |
| |
| |
| |
——————某4096字节对齐处:如0,4096,2*4096
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&~( PAGE_SIZE-1))
怎么理解这个宏,网上都是举例子
如::_bss_end=100,PAGE_SIZE=64,上述计算后,addr=128,刚好是64的倍数,且大于100,若_bss_end=128,则addr=128
如何更加形象的理解:就是参照图形更好理解,什么东西用图就是最好的理解最好的记忆方法,参照上图,先将addr 加4096,让这个地址超出字节对齐地址,再把超出的部分减掉就实现对齐了。说白了就是先进位,再把余数清零。