3 ms·
> Components are stored in contiguous arrays in a SoA (Structure of Arrays) manner, which allows for fast iteration and processing Does this actually matter in
by cmovq 1y ago
> Components are stored in contiguous arrays in a SoA (Structure of Arrays) manner, which allows for fast iteration and processing
Does this actually matter in Lua? Aren’t all array elements going to be pointers to heap allocated objects anyways?
The point of SoA is your likely to be accessed values are adjacent in memory, but if you’re chasing a pointer to get that value then you’re not getting anything out of it.
- PhilipRoman 1y agoLua uses tagged unions so that primitives are stored inline within a table. Some time ago I benchmarked this and the perf gains from SOA were significant. Besides, even if you had to chase pointers, SOA still means you can reduce the number of allocations.
- blackmat 1y agoYes, organizing components as SoA can provide a significant performance boost in Lua, especially with LuaJIT. Both iteration and element access become faster, and it also reduces memory allocations and GC pressure when creating entities. And yes, Lua tables can be contiguous in memory if you use them carefully.
- dicytea 1y agoDo you have any published benchmarks?
- blackmat 1y agoComparative benchmarks are a big task on their own, and usually the author's library wins in them. I have internal benchmarks in the repository, but they are not designed for comparison or for evaluation by outsiders. Maybe I'll get to that someday. As for the SoA approach, here you can find a small and exaggerated example: https://luajit.org/ext_ffi.html https://luajit.org/ext_ffi.html