【发布时间】:2019-01-12 01:10:09
【问题描述】:
我已经开始关注 YouTube 上的 ECS 教程,之前我从未见过有人将新变量分配到 vector 或 uint8 中。
template<typename Component>
uint32 ECSComponentCreate(Array<uint8>& memory, EntityHandle entity, BaseECSComponent* comp)
{
uint32 index = memory.size();
memory.resize(index+Component::SIZE);
Component* component = new(&memory[index])Component(*(Component*)comp);
component->entity = entity;
return index;
}
(有问题的完整代码可以在here找到;Array这里是#define Array std::vector)
它与使用指针向量有何不同,为什么更好?
【问题讨论】:
-
池分配器的特定实现似乎完全忽略了对齐约束,这对 x86 上的性能不利,并导致在不太宽容的平台上崩溃(就标准而言,它是未定义的行为)。
-
顺便说一句,你真的应该在你的问题中包含相关代码以使它们自包含,github repos来来去去......
-
池分配器对我来说是新的,但它看起来很有趣。正如@john-zwinck 指出这种分配策略一样,我已经开始了解更多有关它的信息。感谢您对 Github 的建议。
标签: c++ memory vector entity-component-system