Structural change (ECS)
When an entity's set of components changes in an ECS, its data must be moved between memory blocks — an expensive operation the architecture is otherwise built to avoid.
In an archetype-based ECS, entities with exactly the same set of components are stored packed tightly together, which is the whole point: systems iterate linearly over memory with no cache misses. But add or remove a component and the entity changes archetype, so all of its data has to be copied to a different block. That is a structural change.
Because such a move invalidates pointers and indices in the middle of a running iteration, systems usually may not perform them directly. The fix is a command buffer: changes are queued and replayed at a sync point between systems. Unity's DOTS, Bevy and Flecs all work this way. Sprinkle structural changes every frame and you eat exactly the performance ECS was meant to give.