diff options
Diffstat (limited to 'mm/src/buffers/heaps.c')
| -rw-r--r-- | mm/src/buffers/heaps.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/mm/src/buffers/heaps.c b/mm/src/buffers/heaps.c index 1e779720f..c87312ee4 100644 --- a/mm/src/buffers/heaps.c +++ b/mm/src/buffers/heaps.c @@ -2,23 +2,22 @@ #include "z64.h" #include <assert.h> #include <stdlib.h> -#ifndef _MSC_VER -#include <unistd.h> +#if defined(__unix__) || defined(__APPLE__) +#include <sys/mman.h> #endif u8* gAudioHeap; - u8* gSystemHeap; void Heaps_Alloc(void) { #ifdef _MSC_VER gAudioHeap = (u8*)_aligned_malloc(AUDIO_HEAP_SIZE, 0x10); gSystemHeap = (u8*)_aligned_malloc(SYSTEM_HEAP_SIZE, 0x10); -#elif defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200112L) - if (posix_memalign((void**)&gAudioHeap, 0x10, AUDIO_HEAP_SIZE) != 0) - gAudioHeap = NULL; - if (posix_memalign((void**)&gSystemHeap, 0x10, SYSTEM_HEAP_SIZE) != 0) - gSystemHeap = NULL; +#elif defined(__unix__) || defined(__APPLE__) + gAudioHeap = mmap(NULL, AUDIO_HEAP_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + gSystemHeap = mmap(NULL, SYSTEM_HEAP_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + assert(gAudioHeap != MAP_FAILED); + assert(gSystemHeap != MAP_FAILED); #else gAudioHeap = (u8*)memalign(0x10, AUDIO_HEAP_SIZE); gSystemHeap = (u8*)memalign(0x10, SYSTEM_HEAP_SIZE); @@ -26,4 +25,17 @@ void Heaps_Alloc(void) { assert(gAudioHeap != NULL); assert(gSystemHeap != NULL); -}
\ No newline at end of file +} + +void Heaps_Free(void) { +#ifdef _MSC_VER + _aligned_free(gAudioHeap); + _aligned_free(gSystemHeap); +#elif defined(__unix__) || defined(__APPLE__) + munmap(gAudioHeap, AUDIO_HEAP_SIZE); + munmap(gSystemHeap, SYSTEM_HEAP_SIZE); +#else + free(gAudioHeap); + free(gSystemHeap); +#endif +} |
