1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include "il2cpp-config.h"
- #if IL2CPP_TARGET_POSIX || IL2CPP_TARGET_N3DS && !RUNTIME_TINY
- #include "os/Memory.h"
- #include <stdint.h>
- #include <stdlib.h>
- namespace il2cpp
- {
- namespace os
- {
- namespace Memory
- {
- void* AlignedAlloc(size_t size, size_t alignment)
- {
- #if IL2CPP_TARGET_ANDROID || IL2CPP_TARGET_PSP2
- return memalign(alignment, size);
- #else
- void* ptr = NULL;
- alignment = alignment < sizeof(void*) ? sizeof(void*) : alignment;
- posix_memalign(&ptr, alignment, size);
- return ptr;
- #endif
- }
- void* AlignedReAlloc(void* memory, size_t newSize, size_t alignment)
- {
- void* newMemory = realloc(memory, newSize);
- // Fast path: realloc returned aligned memory
- if ((reinterpret_cast<uintptr_t>(newMemory) & (alignment - 1)) == 0)
- return newMemory;
- // Slow path: realloc returned non-aligned memory
- void* alignedMemory = AlignedAlloc(newSize, alignment);
- memcpy(alignedMemory, newMemory, newSize);
- free(newMemory);
- return alignedMemory;
- }
- void AlignedFree(void* memory)
- {
- free(memory);
- }
- }
- }
- }
- #endif
|