summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouist103 <35883445+louist103@users.noreply.github.com>2025-10-29 16:57:43 +0000
committerGitHub <noreply@github.com>2025-10-29 12:57:43 -0400
commitef1b1a9698ac24975d1a73ba56315c58255b14e1 (patch)
tree75bd0551b28f48a23483adfb80a4934130a7462f
parent0209ea3b0f64fc5b78721cc2d90c1a55d21b49b1 (diff)
Cleanup heap (#1305)
* Small cleanup to heaps.c * Remove stdio.h * _aligned_free * Fix mac * Format
-rw-r--r--mm/src/buffers/heaps.c30
-rw-r--r--mm/src/code/main.c3
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();
}