[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 中:
引用
#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
原文地址:https://www.cnblogs.com/bittorrent/p/3448775.html