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

来源:互联网 发布:全国淘宝店铺有多少个 编辑:程序博客网 时间:2024/06/08 10:51

转载请注明原地址: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,让这个地址超出字节对齐地址,再把超出的部分减掉就实现对齐了。说白了就是先进位,再把余数清零。

 

 

 

 

 

 

原创粉丝点击