mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
// Replacement for malloc.h which factors out platform differences.
|
|
|
|
#include <stdlib.h>
|
|
#if defined(VGO_darwin)
|
|
# include <malloc/malloc.h>
|
|
#else
|
|
# include <malloc.h>
|
|
#endif
|
|
|
|
#include <assert.h>
|
|
|
|
// Allocates a 16-aligned block. Asserts if the allocation fails.
|
|
__attribute__((unused))
|
|
static void* memalign16(size_t szB)
|
|
{
|
|
void* x;
|
|
#if defined(VGO_darwin)
|
|
// Darwin lacks memalign, but its malloc is always 16-aligned anyway.
|
|
posix_memalign((void **)&x, 16, szB);
|
|
#else
|
|
x = memalign(16, szB);
|
|
#endif
|
|
assert(x);
|
|
assert(0 == ((16-1) & (unsigned long)x));
|
|
return x;
|
|
}
|
|
|
|
// Allocates a 32-aligned block. Asserts if the allocation fails.
|
|
__attribute__((unused))
|
|
static void* memalign32(size_t szB)
|
|
{
|
|
void* x;
|
|
#if defined(VGO_darwin)
|
|
// Darwin lacks memalign
|
|
posix_memalign((void **)&x, 32, szB);
|
|
#else
|
|
x = memalign(32, szB);
|
|
#endif
|
|
assert(x);
|
|
assert(0 == ((32-1) & (unsigned long)x));
|
|
return x;
|
|
}
|
|
|
|
// Allocates a 64-aligned block. Asserts if the allocation fails.
|
|
__attribute__((unused))
|
|
static void* memalign64(size_t szB)
|
|
{
|
|
void* x;
|
|
#if defined(VGO_darwin)
|
|
// Darwin lacks memalign
|
|
posix_memalign((void **)&x, 64, szB);
|
|
#else
|
|
x = memalign(64, szB);
|
|
#endif
|
|
assert(x);
|
|
assert(0 == ((64-1) & (unsigned long)x));
|
|
return x;
|
|
}
|
|
|