[fw]PAGE_SIZE & PAGE_SHIFT & _AC()
PAGE_SIZE & PAGE_SHIFT & _AC()
在大多系统下,PAGE_SIZE被定义为 4k 大小,即 4096 字节。
在 x86 系统里,PAGE_SIZE 和 PAGE_SHIFT 都定义在 include/asm-x86/page.h 头文件中:
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
_AC 宏被定义在 /inux/const.h 中:
一般的,因为可能没有定义 __ASSEMBLY__ ,那么 _AC 就会是 __AC(X,Y) 样式。如此一来,_AC(1,UL) 展开后,就成为 1UL ,这样网左移动 PAGE_SHITF 位后,即为 2^12 = 4096
在 x86 系统里,PAGE_SIZE 和 PAGE_SHIFT 都定义在 include/asm-x86/page.h 头文件中:
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
_AC 宏被定义在 /inux/const.h 中:
引用#ifdef __ASSEMBLY__
#define _AC(X,Y) X
#define _AT(T,X) X
#else
#define _AC(X,Y) __AC(X,Y)#define __AC(X,Y) (X##Y)
一般的,因为可能没有定义 __ASSEMBLY__ ,那么 _AC 就会是 __AC(X,Y) 样式。如此一来,_AC(1,UL) 展开后,就成为 1UL ,这样网左移动 PAGE_SHITF 位后,即为 2^12 = 4096