Een C23-demo voor persistente arena-opslag. De arena bewaart data in een caller-owned buffer en gebruikt relatieve offsets in plaats van absolute adressen. Daardoor kunnen boom- en lijststructuren na het laden op een ander RAM-adres direct opnieuw worden gebruikt.
- Arena-allocatie met vaste capaciteit en 8-byte alignment.
- CRC32-validatie van gebruikte data.
- CRC32-validatie van de persistente header.
- Schema-versionering bij het laden.
- Typed arena-slots voor algemene applicatiedata.
- Entity-demo met een catalogus als binaire zoekboom.
- Inventaris als gelinkte lijst met cross-references naar catalogus-items.
- CLI-logniveaus via
argtable3.
EntityGameRoot is de persistente root van de demo. De root verwijst naar:
EntityItemDefinition: catalogus-items metleft- enright-offsets.EntityInventoryItem: inventaris-items met een offset naar hun definitie en eennext-offset naar het volgende item.
Alle offsets zijn relatief aan Arena.buffer. Ze blijven daardoor geldig nadat
de arena opnieuw is geladen op een ander geheugenadres. De API in
include/entity.h valideert offsets voordat deze worden gedereferenced.
- CMake 3.10 of hoger.
- Een C23-compatibele compiler, bijvoorbeeld GCC of Clang.
- Make of een andere CMake-buildgenerator.
- Geen externe dependencies:
argtable3is onderdeel van deze repository.
cmake -S . -B build
cmake --build buildctest --test-dir build --output-on-failureVoor Linux kan de test-build met AddressSanitizer en UndefinedBehaviorSanitizer worden uitgevoerd:
cmake -S . -B build-asan \
-DCMAKE_C_FLAGS='-fsanitize=address,undefined -fno-omit-frame-pointer'
cmake --build build-asan
ctest --test-dir build-asan --output-on-failure./build/arena_loader
./build/arena_loader --log-level=debugDe executable voert drie stappen uit:
- Maakt een game-root, catalogusboom en inventarislijst aan.
- Slaat de arena op in
validated_arena.bin, laadt deze opnieuw en toont de herstelde entity-structuren. - Wijzigt de geladen arena en weigert daarna bewust dezelfde opslag met een afwijkende schema-versie.
Het bestand validated_arena.bin wordt aangemaakt in de huidige werkdirectory.
.
├── CMakeLists.txt
├── include/
│ ├── arena.h # Arena en persistente opslag
│ ├── entity.h # Entity-datamodel en API
│ ├── app_state.h # Applicatiestate-helpers
│ ├── crc.h # CRC32 API
│ ├── config.h # Capaciteits- en bestandsconfiguratie
│ ├── logger.h # Logging API
│ └── argtable3.h # Lokale CLI-parser API
├── src/
│ ├── arena.c
│ ├── entity.c
│ ├── app_state.c
│ ├── crc.c
│ ├── logger.c
│ ├── main.c
│ └── argtable3.c
├── tests/test_arena_loader.c
└── README.md
De compiler wordt geconfigureerd met -Wall -Wextra -Werror -Wpedantic en
-std=c23.