# Memory System Status & Migration Plan ## Completed Work ### Core Systems - **MemoryArena**: Implemented linear allocator with alignment, markers, and reset support. - **Global Arenas**: - `ScratchArena` (64MB): Transient per-frame memory. - `EngineArena` (256MB): Persistent engine memory (internal). - `GameArena` (512MB): Persistent game memory (exported to Game DLL). - **Helpers**: Added `ArenaPushType` and `ArenaPushArray` with automatic zero-initialization. ### Migrated Subsystems - **Display**: `Win32Window` and `Win32DisplayDevice` now use `EngineArena`. - **Game Entities**: `Entity.h` uses `GameArena` for entity allocation; manual `free` calls removed from `game.cpp`. - **Hot Reload**: `HotReload.cpp` (persistent paths to `EngineArena`) and `Win32HotReload.cpp` (temp paths to `ScratchArena`). ## Remaining Work The following subsystems still use legacy `malloc`/`calloc`/`realloc`/`free` and need to be migrated. ### IO System - **Files**: `Core/HAL/IO/IOStream.cpp`, `Core/HAL/IO/Win32/Win32IOStream.cpp` - **Allocations**: `IOStream` instance, data buffers, `Win32IOStreamDataPayload`. - **Challenge**: `Realloc` is used for growing buffers. - **Strategy**: - `IOStream` struct -> `ScratchArena` (if transient) or `EngineArena`. - Buffers: Evaluate if `ArenaPush` with large enough capacity is sufficient, or implement a growable buffer on top of arena (or use `std::vector` with custom allocator if absolutely needed, but prefer simple fixed max size if possible). ### Graphics / Debug - **Files**: `Graphics/DebugDisplayRenderer.cpp` - **Allocations**: `DepthTestedVertices`, `OverlayVertices`. - **Strategy**: Use `EngineArena` or a dedicated `RenderArena` if these are persistent. If per-frame, move to `ScratchArena`. ### Shader Compiler - **Files**: `JulietShaderCompiler/ShaderCompiler.cpp` - **Allocations**: Argument arrays, file buffers. - **Strategy**: Use `ScratchArena` for all compilation tasks as they are transient. ### Filesystem - **Files**: `Core/HAL/Filesystem/Filesystem.cpp` - **Allocations**: `CachedBasePath`. - **Strategy**: Migrate to `EngineArena` (persistent).