内存管理界面

Memory management interface

本文关键字:界面 管理 内存      更新时间:2023-10-16

我正在用C++编写一个小粒子系统,但还不确定我应该如何管理粒子相关数据 - 它应该存储在静态或动态数组中,在链表中,两者的混合,还是人们可能想到的任何其他东西?

目前我不想做出选择,而是想使用一个抽象类进行内存管理,它一方面为我提供分配和释放例程,另一方面负责在其析构函数中释放提供的资源。我希望通过这种方式,我可以快速透明地切换和测试不同的粒子管理策略。

1)这是合理的做法吗?

2) 如果是:是否有任何库提供此类功能?

谢谢你的帮助!

对于粒子系统,您可能希望考虑为每个粒子的每个坐标、速度、颜色通道等使用一个std::vector。例如

std::vector<float> x(100);
std::vector<float> vx(100);
etc

而不是

std::vector<Particle> p(100)

这被称为SOA(数组结构)而不是AOS(结构数组)。前者更适合矢量化。

经验法则是使用std::vector,除非你真的有理由选择其他东西。目前你可以坚持下去。要在低级别控制内存管理,您可以为vector提供自己的allocator,以防std::allocator使用std::new_allocator。如果您主要关心的是大量删除和分配单个对象,那么您可以考虑编写自己的用户定义分配器,该分配器将从组织成链表的固定大小元素池中进行分配,因为传统和更通用的oeprator new()在多次调用的情况下效率不高一次分配或释放一个对象。

测试不同的容器是IMO的合理事情,但是矢量就足够了。为了决定是否

1)这是合理的做法吗?

因此,应该完全涵盖此类测试-您必须考虑将要广泛使用的操作。

2) 如果是:是否有任何库提供此类功能?

我不知道这样的图书馆。