Added a basic MemoryArena.
Added one scratch, one engine and one game arena. Converted the game alloc to arena + the display stuff. WIP Made using Antigravity+gemini
This commit is contained in:
49
AgentData/MemoryArena.md
Normal file
49
AgentData/MemoryArena.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 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`.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
The following subsystems still use legacy `malloc`/`calloc`/`realloc`/`free` and need to be migrated.
|
||||
|
||||
### Hot Reload System
|
||||
- **Files**: `Core/HotReload/HotReload.cpp`, `Core/HotReload/Win32/Win32HotReload.cpp`
|
||||
- **Allocations**: `DLLFullPath`, `LockFullPath`, `tempDllPath`.
|
||||
- **Strategy**:
|
||||
- Use `EngineArena` for persistent paths (`DLLFullPath`, `LockFullPath`).
|
||||
- Use `ScratchArena` for temporary paths (`tempDllPath`).
|
||||
|
||||
### 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).
|
||||
Reference in New Issue
Block a user