如何让地址实现某一个长度的地址对齐?

转载请注明原地址:http://blog.csdn.net/oyhb_1992/article/details/77043355

如何让地址实现某一个长度的地址对其?

例如将某一个地址实现4096字节对齐

——————某4096字节对齐处:如3*40964*4096

         |                 |

         |                 |

         |                 |

         |                 |

         |                 |ß(addr)+PAGE_SIZE-1

         |                 |

          |                |

         |                 |

         |                 |

         ——————某4096字节对齐处:如2*40963*4096 对齐后addr

         |                 |

         |                 |

         |                 |

         |                 |

         |                 |ßaddr 对齐前addr

         |                 |

         |                 |

         |                 |

         |                 |

         ——————某4096字节对齐处:如0,4096,2*4096

#define PAGE_ALIGN(addr)   (((addr)+PAGE_SIZE-1)&~( PAGE_SIZE-1))

怎么理解这个宏,网上都是举例子

       如::_bss_end=100PAGE_SIZE=64,上述计算后,addr=128,刚好是64的倍数,且大于100,若_bss_end=128,则addr=128

        如何更加形象的理解:就是参照图形更好理解,什么东西用图就是最好的理解最好的记忆方法,参照上图,先将addr 4096,让这个地址超出字节对齐地址,再把超出的部分减掉就实现对齐了。说白了就是先进位,再把余数清零。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值