c - 分支优化

标签 c optimization branch

从性能的角度来看,分支函数调用的最佳实现是什么?

在原始情况下,我们有一个相当大的 switch 语句,它解释字节码并根据代码执行函数调用。

在正常情况下,我们计算的 goto 和标签做同样的事情。

做到这一点的绝对最佳方法是什么?

一个抽象的例子,

schedule: 
    swap_entity();
    goto *entity_start();

lb_code1:
    do_stuff();
    goto *next_code_item();

lb_code2:
    do_stuff();
    goto *next_code_item();

...

编辑:我对“分支函数调用”的引用可能有些错误。分支代码执行。

最佳答案

猜测可能是一个函数指针数组:

void dispatch(Message* message)
{
  //MessageType is a finite enum
  MessageType messageType = message->messageType;
  int index = (int)messageType;
  //there's an array element for each enum value
  FunctionPointer functionPointer = arrayOfFunctionPointers[index];
  (*functionPointer)(message);
}

实际答案取决于硬件,取决于问题的大小和 CPU 的缓存等因素。

关于c - 分支优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337155/

相关文章:

Git rebase 子树

python - 使用 if 条件列表理解

arrays - 最佳数据在索引/数据屏蔽处获取/设置 uint8

git: merge 分支但保留提交历史

c - 如何计算局部变量和用户定义函数的循环执行次数? C语言

java - List上hashCode()的JVM优化

mercurial - 如何对 Mercurial 中的先前标签提交错误修复?

将函数迭代转换为递归

c - 如何使用 strtol 读取 __int64 值?

c - 为什么不能将 linux 服务绑定(bind)到环回?