#include #include #include #include struct foo { int a; char data[500]; }; void fn(void *base) { struct foo *a = (struct foo*)base; printf("a.a: %d\n", a->a); printf("a data: %s\n", a->data); struct foo *b = base + sizeof(struct foo); printf("a starts at: %p, foo is %lu big, so b starts at %p\n", a, sizeof(struct foo), b); } int main(int argc, char *argv[argc+1]) { // 100 MB size_t len = 100 << 20; void *base = mmap(0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); fn(base); munmap(base, len); }