gpt4 book ai didi

c - 什么时候应该小心使用 bitset 代替 bool 数组?

转载 作者:行者123 更新时间:2023-12-01 15:05:45 25 4
gpt4 key购买 nike

我正在开发一款手机应用程序,我看到了提高性能的潜在机会。在整个代码中,我使用 bool 数组来跟踪哪些对象处于事件状态。例如,我会通过执行以下操作来检查第 i 个 MyObject 是否处于事件状态:

if(activeMyObjects[i]){ // it's active so do something... }

由于我的对象的最大数量在 [5,20] 范围内,我想我可以用单个整数“activeMyObjects”形式的位集替换 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...

有没有什么时候切换到位集实际上会降低性能?我使用的语言是 c。另请注意,此代码经常被调用(频率范围为 30 - 60 Hz)。

编辑:另一条信息:位集还有另一个优势,我可以轻松判断是否有任何对象处于事件状态。所以我可以跳过一个循环,在这个循环中我通过首先检查 if(activeMyObjects) 来检查每个项目以查看它是否处于事件状态。当我使用数组时,这更棘手......我的方法是有一个额外的计数器 int,每当 MyObject 被激活时它就会递增,而每当 MyObject 被停用时它就会递减......这样我只会检查 if(activeMyObjectsCount > 0)在我检查每一个的循环之前。

最佳答案

根据 bitset 的分配频率,您可以很容易地使用 bitset 版本占用更多内存。

访问特定位的代码比访问整个内存字节的代码大得多 - 如果只有少数这些数组,但它经常被访问,那么你会得到更小的空间就像它一样。

关于c - 什么时候应该小心使用 bitset 代替 bool 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1857549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com