关于TChunkedArray和UE5的ECS框架Mass

发布时间 2023-06-06 16:44:43作者: 蜡笔小新紫南
在虚幻引擎中,TChunkArray 是一个动态数组类型。它通过分配一系列固定大小的 Chunk 来管理Array中的元素。每个 Chunk 具有以下特征:1. 固定大小,通常为 4096 个元素。该大小在TChunkArray定义时指定,之后所有 Chunk 的大小都是一致的。2. 可以连续或不连续的分配在内存中。TChunkArray 会根据需要自动分配与回收Chunk。3. 一个 Chunk 中的元素,其索引必须是连续的,从0开始。不同Chunk之间的元素索引可以是不连续的。4. Chunk 之间通过指针相连,TChunkArray 通过这些指针来访问不同 Chunk 中的元素。5. 空闲的 Chunk 通过链接表连接,可被后续的元素分配重用。举个例子:我们定义一个TChunkArray,Chunk大小为4。现在向其中添加元素,内存分配情况如下:Chunk 0:[0, 1, 2, 3]
Chunk 1:(空闲)
Chunk 2:[4, 5]
Chunk 3:(空闲)
Chunk 4:[8, 9]此时:- Chunk 0 中索引为 0-3 的元素已经分配。
- Chunk 1 是空闲的。 
- Chunk 2 中索引为 4-5 的元素已经分配。
- Chunk 3 是空闲的。 
- Chunk 4 中索引为 8-9 的元素已经分配。所以我们可以通过指针访问这些不连续的 Chunk,并通过每个 Chunk 内的连续索引访问元素。TChunkArray 的主要作用是可以动态地分配大量元素,而不会有很大的内存消耗。通过回收与重用空闲 Chunk,可以较好地管理内存。另外,由于每个 Chunk 中的元素索引是连续的,这有利于缓存的效果,访问速度较快。