構造的変更(ECS)
ECSでエンティティのコンポーネント構成が変わると、そのデータをメモリブロック間で移動する必要がある。本来ECSが避けるよう設計されている高価な操作。
アーキタイプ方式のECSでは、まったく同じコンポーネント構成のエンティティが密に詰めて格納される。これこそが狙いで、システムはキャッシュミスなしにメモリを線形になめられる。ところがコンポーネントを追加・削除するとエンティティのアーキタイプが変わり、全データを別のブロックへコピーしなければならない。これが構造的変更だ。
こうした移動は、実行中のイテレーションの途中でポインタやインデックスを無効にするため、システムは通常それを直接行えない。解決策はコマンドバッファで、変更をキューに積み、システム間の同期点でまとめて再生する。UnityのDOTS、Bevy、Flecsはいずれもこの方式だ。毎フレーム構造的変更をばらまけば、ECSがもたらすはずだった性能をまさに食いつぶす。