Component:
Components are essentially just raw data structs with some collection wrappers around them.
Their primary storage is a UList which is essentially just an untyped List<T> that operates on a raw void*.
Around that is a Sparse set wrapper a container, which has a sparse array of indexes into a packed array.
This significantly reduces the amount of memory used by entities which dont have that specific component.
Also it has paging implented which further reduces memory usage if only a small set of entities actually has a specific component