rflc rflc - 1 year ago 95
C Question

How do I get pointer to beginning of a page

How do I get a pointer to the beginning of a page?

I tried the following to no success:

#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;

I'm trying to mitigate TLB misses. Any possible assistance is greatly appreciated.

Answer Source

To get the address of the beginning of the page containing the address a, divide by the page size and then multiply by the page size.

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

This works because of the truncation performed during integer division.

You can also subtract the modulus:

long int page_beginning = a - (a % PAGESIZE);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download