您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页Linux PAGE_ALIGN 宏定义的理解

Linux PAGE_ALIGN 宏定义的理解

来源:五一七教育网

前言

  • 最近再阅读 Linux ion(一种内存分配管理)时,遇到了 PAGE_ALIGN 宏,这个宏到底是怎么工作的? 【页对齐】时什么意思? 页大小就是 4096 吗?

追踪 PAGE_ALIGN

  • 通过一步一步的追踪,终于了解了 PAGE_ALIGN 宏的最终展开定义。其实就是 PAGE_SIZE 对齐,Linux 上默认是 4096

  • 源头: Linux 内核 drivers\staging\android\ion\ion_buffer.c -> ion_buffer_alloc

  • PAGE_ALIGN 的定义 include\linux\mm.h
/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)

  • arch\arc\include\uapi\asm\page.h -> PAGE_SIZE 的定义: 4096 的来源 1<<12

  • include\linux\kernel.h ALIGN 的定义实现

  • 继续展开: include\uapi\linux\const.h,获取 PAGE_ALIGN 的最终实现

  • PAGE_ALIGN 的展开

((((len)) + ((typeof((len)))(((((1UL)) << (12)))) - 1)) & ~((typeof((len)))(((((1UL)) << (12)))) - 1))

  • 可以同时看到 mask (掩码)的巧妙获取,比如 PAGE_SIZE - 1

小结

  • 重视细节,掌握全局,认真阅读,勤做笔记

  • Linux 技术非常的使用,多研究,获取更多

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务