14 #if !defined(NX_KIT_API) 23 inline size_t alignUp(
size_t val,
size_t alignment)
25 const size_t remainder = val % alignment;
28 return val + (alignment - remainder);
40 template<
class MallocFunc>
41 void*
mallocAligned(
size_t size,
size_t alignment, MallocFunc mallocFunc)
45 void* ptr = mallocFunc(size + alignment +
sizeof(alignment));
49 void* aligned_ptr = (
char*) ptr +
sizeof(alignment);
50 const size_t unalignment = alignment - (((size_t) aligned_ptr) % alignment);
51 memcpy((
char*) ptr+unalignment, &unalignment,
sizeof(unalignment));
52 return (
char*) aligned_ptr + unalignment;
58 return mallocAligned<>(size, alignment, ::malloc);
68 template<
class FreeFunc>
74 ptr = (
char*) ptr -
sizeof(
size_t);
75 size_t unalignment = 0;
76 memcpy(&unalignment, ptr,
sizeof(unalignment));
77 ptr = (
char*) ptr - unalignment;
85 return freeAligned<>(ptr, ::free);
void * mallocAligned(size_t size, size_t alignment, MallocFunc mallocFunc)
Definition: utils.h:41
void freeAligned(void *ptr, FreeFunc freeFunc)
Definition: utils.h:69
size_t alignUp(size_t val, size_t alignment)
Definition: utils.h:23