This source file includes following definitions.
- default_malloc
- default_free
- halide_set_custom_malloc
- halide_set_custom_free
- halide_malloc
- halide_free
#include "HalideRuntime.h"
extern "C" {
extern void *malloc(size_t);
extern void free(void *);
}
namespace Halide { namespace Runtime { namespace Internal {
WEAK void *default_malloc(void *user_context, size_t x) {
const size_t alignment = 128;
x = (x + alignment - 1) & ~(alignment - 1);
void *orig = malloc(x + alignment);
if (orig == NULL) {
return NULL;
}
void *ptr = (void *)(((size_t)orig + alignment + sizeof(void*) - 1) & ~(alignment - 1));
((void **)ptr)[-1] = orig;
return ptr;
}
WEAK void default_free(void *user_context, void *ptr) {
free(((void**)ptr)[-1]);
}
WEAK halide_malloc_t custom_malloc = default_malloc;
WEAK halide_free_t custom_free = default_free;
}}}
extern "C" {
WEAK halide_malloc_t halide_set_custom_malloc(halide_malloc_t user_malloc) {
halide_malloc_t result = custom_malloc;
custom_malloc = user_malloc;
return result;
}
WEAK halide_free_t halide_set_custom_free(halide_free_t user_free) {
halide_free_t result = custom_free;
custom_free = user_free;
return result;
}
WEAK void *halide_malloc(void *user_context, size_t x) {
return custom_malloc(user_context, x);
}
WEAK void halide_free(void *user_context, void *ptr) {
custom_free(user_context, ptr);
}
}