2016-11-22 75 views
-1

我正在尝试优化我的游戏中我的抛射物体的组织。向量.reserve()和分配效率(C++)

我读过,我应该避免在游戏运行时分配,以避免性能问题。所以,如果我在游戏状态开始时用reserve(1000)初始化矢量,并且在运行时通过push_back(Projectile())添加了Projectile对象;会导致“分配”还是只填充已分配的空间并且是超快的? ; D

+1

它会超快,因为你不要求超过1000个元素 –

+3

当你使用emplace_back时会更快,因为你避免了可能的副本。 – Surt

+0

@Super push_back支持移动语义 –

回答

0

根据抛射物的可移动性,将抛射物置于载体中的不同方式具有不同的成本。从复制抛射体移动抛射体到构建抛射体。

但有一个更快的方法,即重用。

在游戏开始前构造所有的弹丸,然后随时重复使用弹丸。

+0

我尝试了重复使用的方式,但它给了我头痛:由于我通过所有“主动”射弹循环每个游戏打勾,我想避免检查每个射弹是否(射弹[i] .active == true),而是使第一个“index x”元素处于活动状态并调整x。如果我要重复使用,并且弹丸从活动状态变为非活动状态,我首先必须在矢量中找到它的位置(循环遍历所有活动元素),将其放在矢量的末尾,并调整每个对象的位置索引更高到-1。这真的会有效吗? –

+0

如果您有两个变量,第一个是第一个活动射弹,第二个是最后一个活动射弹。这会减少您必须检查的条目数量。但是,弹丸的大小和成分决定了它移动/复制的速度。另一方面,如果它们很大,则只有活动射弹的输入数字。 – Surt