diff --git a/src/common/mem_utils/mem_utils.c b/src/common/mem_utils/mem_utils.c index 4c0edb9..9b476e1 100644 --- a/src/common/mem_utils/mem_utils.c +++ b/src/common/mem_utils/mem_utils.c @@ -39,7 +39,13 @@ void *wapp_mem_util_align_forward(void *ptr, u64 alignment) { } void *wapp_mem_util_alloc(void *addr, u64 size, MemAccess access, MemAllocFlags flags, MemInitType type) { - return mem_util_allocate(addr, size, access, flags); + void *output = mem_util_allocate(addr, size, access, flags); + + if (type == WAPP_MEM_INIT_INITIALISED) { + memset(output, 0, size); + } + + return output; } void wapp_mem_util_free(void *ptr, u64 size) { diff --git a/src/common/mem_utils/win/mem_utils_win.c b/src/common/mem_utils/win/mem_utils_win.c index 9c4c30f..bf0f0e5 100644 --- a/src/common/mem_utils/win/mem_utils_win.c +++ b/src/common/mem_utils/win/mem_utils_win.c @@ -20,6 +20,11 @@ internal const i32 access_types[] = { }; void *mem_util_allocate(void *addr, u64 size, MemAccess access, MemAllocFlags flags) { + // Ensure memory is committed if it's meant to be initialised + if (type == WAPP_MEM_INIT_INITIALISED) { + flags |= WAPP_MEM_ALLOC_COMMIT; + } + return VirtualAlloc(addr, (SIZE_T)size, flags, access_types[access]); }