diff options
| author | louist103 <35883445+louist103@users.noreply.github.com> | 2025-10-29 16:57:43 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-29 12:57:43 -0400 |
| commit | ef1b1a9698ac24975d1a73ba56315c58255b14e1 (patch) | |
| tree | 75bd0551b28f48a23483adfb80a4934130a7462f | |
| parent | 0209ea3b0f64fc5b78721cc2d90c1a55d21b49b1 (diff) | |
Cleanup heap (#1305)
* Small cleanup to heaps.c
* Remove stdio.h
* _aligned_free
* Fix mac
* Format
| -rw-r--r-- | mm/src/buffers/heaps.c | 30 | ||||
| -rw-r--r-- | mm/src/code/main.c | 3 |
2 files changed, 23 insertions, 10 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 +} diff --git a/mm/src/code/main.c b/mm/src/code/main.c index 764660ca6..a5b8aa734 100644 --- a/mm/src/code/main.c +++ b/mm/src/code/main.c @@ -47,7 +47,7 @@ s32 gScreenHeight = SCREEN_HEIGHT; size_t gSystemHeapSize = 0; void InitOTR(); - +void Heaps_Free(void); #ifdef __GNUC__ #define SDL_main main #endif @@ -148,4 +148,5 @@ void SDL_main(int argc, char** argv /* void* arg*/) { #ifdef _WIN32 FreeConsole(); #endif + Heaps_Free(); } |
