diff --git a/src/mem/util/mem_utils.c b/src/mem/util/mem_utils.c index 87889c6..e642e9b 100644 --- a/src/mem/util/mem_utils.c +++ b/src/mem/util/mem_utils.c @@ -65,6 +65,11 @@ void *wapp_mem_util_align_forward(void *ptr, u64 alignment) { void *wapp_mem_util_alloc(u64 size, MemAccess access, MemAllocFlags flags, MemInitType type) { #if defined(WAPP_PLATFORM_WINDOWS) + // Ensure memory is committed if it's meant to be initialised + if (type == WAPP_MEM_INIT_INITIALISED) { + flags |= WAPP_MEM_ALLOC_COMMIT; + } + void *output = alloc_windows(size, access, flags); #elif defined(WAPP_PLATFORM_POSIX) void *output = alloc_posix(size, access, flags); @@ -99,7 +104,8 @@ internal inline void *alloc_posix(u64 size, MemAccess access, MemAllocFlags flags) { i32 alloc_flags = flags | MAP_ANON | MAP_PRIVATE; -#ifdef WAPP_PLATFORM_LINUX +#if defined(WAPP_PLATFORM_LINUX) || defined(WAPP_PLATFORM_GNU) || \ + defined(WAPP_PLATFORM_NET_BSD) alloc_flags |= MAP_NORESERVE; #endif diff --git a/src/mem/util/mem_utils.h b/src/mem/util/mem_utils.h index f2a54e8..20c3896 100644 --- a/src/mem/util/mem_utils.h +++ b/src/mem/util/mem_utils.h @@ -30,9 +30,16 @@ typedef enum mem_alloc_flags { #if defined(WAPP_PLATFORM_WINDOWS) WAPP_MEM_ALLOC_RESERVE = MEM_RESERVE, WAPP_MEM_ALLOC_COMMIT = MEM_COMMIT, -#elif defined(WAPP_PLATFORM_POSIX) +#elif defined(WAPP_PLATFORM_LINUX) || defined(WAPP_PLATFORM_GNU) WAPP_MEM_ALLOC_RESERVE = 0, WAPP_MEM_ALLOC_COMMIT = MAP_POPULATE, +#elif defined(WAPP_PLATFORM_FREE_BSD) + WAPP_MEM_ALLOC_RESERVE = 0, + WAPP_MEM_ALLOC_COMMIT = MAP_PREFAULT_READ, +#elif defined(WAPP_PLATFORM_BSD) || defined(WAPP_PLATFORM_UNIX) || \ + defined(WAPP_PLATFORM_APPLE) + WAPP_MEM_ALLOC_RESERVE = 0, + WAPP_MEM_ALLOC_COMMIT = 0, #endif } MemAllocFlags;