Files
Juliet/AgentData/MemoryArena.md
Patedam 7328d02d3d Converted Descriptor heap to memory arena. Used Gemini with antigravity.
Heap pool code is a mess right now (lot of useless comments)
Will revisit later.
2026-01-18 14:33:52 -05:00

2.1 KiB

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<T> and ArenaPushArray<T> 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).