内存管理界面
Memory management interface
我正在用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) 如果是:是否有任何库提供此类功能?
我不知道这样的图书馆。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 如何维护资源管理器项目视图中当前可见的项目列表
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 资源管理设计模式
- 使用"Task"函数指针队列定义作业管理器
- 实现动态插件管理器
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- libcurl 和 DNS ttl 中的内部连接管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 在C++管理一家中国.txt
- 编译器资源管理器和 GCC 具有不同的输出
- 我们可以通过 IPC 传递具有动态管理成员的类对象吗?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- Q没有管理权限的 exe 无法启动维护工具
- Qt5 用户界面编译器:-i 选项不可用
- QT:管理来自 QNetworkReply 的回复
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 读取 TCP 标头并使用RAW_SOCKET管理 TCP 连接
- Windows 资源管理器中的图标在使用 resource.rc 时显示 2 个不同的图标
- 内存管理界面