"Objective C" vs "C++" :方法调用语句的区别

"Objective C" vs "C++" : difference in statement for method invocation

我想了解当 CPU 执行 Objective C 语句 [ object method ] 的机器代码时实际发生的情况以及执行 C++ 语句 object->method() 时发生的情况.

应用程序的性能或稳健性等方面可能存在显着差异?为什么或者为什么不?

欢迎引用任何示例或证据。

偶尔会有显着差异。当您开始添加优化和其他内容时,情况就不太清楚了。

主要的基本区别是 [object method] 是在运行时调度的,而在许多情况下对于 C++,它是在编译时调度的。

因此,要在 Obj-C 中进行分派,需要使用指向对象的指针、消息的描述符以及参数来调用实际的例程。该例程使用描述符为 class 索引方法 table,然后调用相应的逻辑。这就是为什么您可以将消息发送到实际上并未实现消息的对象(并因此分派到 doesNotImplement)的原因。 Obj-C 中的大部分灵活性都集中在这个运行时调度功能上。

在C++中,它只不过是通过指针调用一个函数而已。使用简单的 class,方法在编译时以静态结构维护,编译器可以直接索引到该列表以找到实现逻辑的函数指针。所以在运行时,不需要搜索。在这方面,C++ 在方法调度方面表面上可以比 Obj-C 更快。

那是 30,000 英尺的高度。 C++ 虚拟方法和现代 Obj-C 运行时的情况有所不同。我不能说任何关于现代 C++ 的功能以及它如何扩展它的调度功能。此外,现代 Obj-C 运行时非常高效。我认为 ARM 上的调度可以少于 10 条指令或类似的指令。