7 #define PTR_ALIGN(ptr, mask) \
8 (char *)((uintptr_t)((ptr) + (mask)) & ~(mask))
14 void *fio_memalign(size_t alignment, size_t size, bool shared)
16 struct align_footer *f;
17 void *ptr, *ret = NULL;
19 assert(!(alignment & (alignment - 1)));
22 ptr = smalloc(size + alignment + sizeof(*f) - 1);
24 ptr = malloc(size + alignment + sizeof(*f) - 1);
27 ret = PTR_ALIGN(ptr, alignment - 1);
29 f->offset = (uintptr_t) ret - (uintptr_t) ptr;
35 void fio_memfree(void *ptr, size_t size, bool shared)
37 struct align_footer *f = ptr + size;
40 sfree(ptr - f->offset);
42 free(ptr - f->offset);