【发布时间】:2009-12-07 02:55:33
【问题描述】:
我正在开发一个手机应用程序,我看到了提高性能的潜在机会。在整个代码中,我使用 bool 数组来跟踪哪些对象是活动的。例如,我会通过执行以下操作来检查第 i 个 MyObject 是否处于活动状态:
if(activeMyObjects[i]){ // it's active so do something... }
由于我的对象的最大数量在 [5,20] 范围内,我想我可以用单个整数“activeMyObjects”形式的 bitset 替换 activeMyObjects bool 数组。然后我可以执行以下操作:
// check if ith object is active
if(activeMyObjects & (1 << i)){ // it's active... }
// activate the ith object
activeMyObjects |= (1 << i);
// reset all myObjects to inactive
activeMyObjects = 0;
// and so on...
是否有任何时候切换到 bitset 会降低性能?我使用的语言是 c。另请注意,此代码的调用频率很高(频率范围为 30 - 60 Hz)。
编辑: 另一条信息:位集还有另一个优点,即我可以轻松判断是否有任何对象处于活动状态。所以我可以跳过一个循环,通过首先检查 if(activeMyObjects) 来检查每个项目以查看它是否处于活动状态。当我使用数组时,这更棘手......我的方法是有一个额外的计数器 int,每当激活 MyObject 时递增,每当停用 MyObject 时递减......这样我只需检查 if(activeMyObjectsCount > 0)在我检查每个循环之前。
【问题讨论】:
标签: c performance