如何获得指向页面开头的指针

时间:2016-09-27 17:59:23

标签: c alignment

如何获得指向页面开头的指针?

我尝试了以下方法但没有成功:

#define PAGESIZE 4096

 bool is_page_aligned(void *p)
 {
    return !((long int)p & 0xFFF);
 }

 int main(void)
 {
     bool res;
     void *buffer;

     buffer = malloc(PAGESIZE*2);
     printf("%p\n", (void *) &buffer);
     res = is_page_aligned(&buffer);
     fputs(res ? "true\n" : "false\n", stdout);
     return 0;
}

我正在努力减轻TLB未命中。非常感谢任何可能的帮助。

1 个答案:

答案 0 :(得分:0)

要获取包含地址a的页面开头的地址,请除以页面大小,然后乘以页面大小。

long int page_beginning = PAGESIZE * (a / PAGESIZE);

这是因为在整数除法期间执行截断。

您还可以减去模数:

long int page_beginning = a - (a % PAGESIZE);