【发布时间】:2010-03-14 02:22:27
【问题描述】:
我听说在 Objective-C 中调用处理程序(委托等)比在 C++ 中调用虚函数还要快。真的正确吗?如果是这样,那怎么可能?
AFAIK,调用虚函数并没有那么慢。至少,这是我对调用虚函数时会发生什么的理解:
- 获取指向
vtbl的指针。 - 取消引用指针并获取函数指针数组的开头。
- 用方法的索引偏移数组的开头(指针刻度)。考虑到索引在编译时是已知的,只需将
uintptr_t的倍数相加即可。 - 发出
call指令。
不幸的是,我不懂 Objective-C,所以我很难比较性能。但至少,虚函数调用的机制看起来并没有那么慢,对吧?静态函数调用以外的东西怎么能更快?
【问题讨论】:
-
先测量,再优化。如果您遇到这样一种情况,即 Objective-c 消息调度的开销实际上占 CPU 使用的任何显着百分比,我会感到非常惊讶。它可能会发生,但不会经常发生。
-
使用这个性能测试项目来获得所有答案:github.com/LearnCocos2D/LearnCocos2D/tree/master/…
标签: c++ objective-c function delegates