【问题标题】:Bitfields vs. Polymorphism for game map object attributes游戏地图对象属性的位域与多态性
【发布时间】:2011-04-13 12:46:00
【问题描述】:

这个优化问题在最后一天一直困扰着我。

在我的程序(一个简单的 roguelike 游戏)中,我使用位标志来存储地图对象的属性,例如它们是否是实体的,或者它们是否被渲染。但是,我可以使用多态性来完成这件事,以返回适当的值。

我的问题是,在链表循环中使用时,任何一种方式都比另一种方式快得多还是慢得多?另外,一种做法比另一种更好吗?

代码示例:

XMapObject *List = ListStart;

while(List != NULL)
{
    if(List->MapObjectFlags & MAPOBJECTFLAG_RENDER)
      OR
    if(List->Render())
    {
        return List->Type;
    }
    else
    {
        List = List->Next;
    }
}

bool XMapObject::Render()
{
     return 1;
}

谢谢。

【问题讨论】:

  • 我认为,你正在做的这是一个过早的优化。
  • 您还可以创建非虚拟内联 Render() 成员函数,该函数将简单地 return MapObjectFlags & MAPOBJECTFLAG_RENDER 并使用它而不是隐式按位运算。然后,如果您决定切换到另一种检查方法,您只需更改实现即可。
  • @n0rd:这绝对是为时过早,但这个问题一直困扰着我,因为我正在监督项目中的一些旧资源。

标签: c++ optimization polymorphism bit-manipulation bit-fields


【解决方案1】:

按位运算总是比虚函数调用快。

【讨论】:

  • 我是这么认为的。也想了想,也比较灵活。
  • 如果单个int(或您用于存储的任何内容)中的位数非常有限,如何更灵活?
  • 比我原来的例子更灵活,它有硬编码的返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多