HeadlinesBriefing HeadlinesBriefing.com

双头栈分配器性能优化

Hacker News •
×

当开发诸如视频游戏等高性能应用程序时,开发人员寻求技巧来编写快速代码,以最大化有限的资源。内存分配对于需要可变内存的性能关键代码至关重要。“bump分配器”或栈分配器通过将分配视为简单的整数加法,释放视为更便宜的整数赋值来优化这一过程。大约在2010年,在Surreal Software公司致Cancelled项目“This is Vegas”期间,动画编程面临频繁的临时分配用于动画混合。这些分配仅在每帧中短暂存在,且取决于哪些角色处于活动状态,由摄像机视锥体确定。该分配器在性能分析中显示为热点。解决方案是实现一种栈分配器,其中分配仅是整数加法,释放内存是单个整数赋值。通过分配固定块(例如1MB)并维护“tos”(栈顶)变量,内存管理变得几乎即时。结果是显著的性能提升,分配在性能分析器中占用可测量的时间。一个关键限制是这种分配器不会自动调用析构函数;虽然placement new可以处理构造函数,但析构函数管理是手动的且容易出错。此外,如果“tos”变量使用原子加法,栈分配器在多线程环境中表现出色,允许多个线程从同一池中分配,适用于fork/join CPU情况或GPU算法。部分释放也是可能的,在递归过程开始时记住“tos”状态,并在完成后重置它。这种技术为游戏帧期间的临时内存需求提供了可观的速度提升。

来源: Hacker News · 由HeadlinesBriefing整理摘要