&引用;目标C“;vs";C++&引用;:方法调用语句中的差异 我想了解当CPU执行目标C语句 [Objult[f] ] /Cudio的机器代码时,当执行C++语句>代码>对象>方法()/ < < /P>时,会发生什么?

&引用;目标C“;vs";C++&引用;:方法调用语句中的差异 我想了解当CPU执行目标C语句 [Objult[f] ] /Cudio的机器代码时,当执行C++语句>代码>对象>方法()/ < < /P>时,会发生什么?,c++,objective-c,machine-code,C++,Objective C,Machine Code,在应用程序的性能或健壮性等方面可能存在显著差异?为什么 欢迎参考任何例子或证据。偶然之间可能会有显著差异。当您开始添加优化和其他内容时,就不那么清楚了 主要的基本区别是 [ObjultMe] 是在运行时分派的,而C++的很多情况下,它是在编译时调度的。 因此,为了在Obj-C中进行调度,将使用指向对象的指针、消息描述符以及参数调用实际例程。该例程使用描述符索引到类的方法表中,然后调用相应的逻辑。这就是为什么您可以将消息发送到实际上并没有实现消息的对象(从而获得dispatch to doesNo

在应用程序的性能或健壮性等方面可能存在显著差异?为什么


欢迎参考任何例子或证据。

偶然之间可能会有显著差异。当您开始添加优化和其他内容时,就不那么清楚了

主要的基本区别是 [ObjultMe] 是在运行时分派的,而C++的很多情况下,它是在编译时调度的。 因此,为了在Obj-C中进行调度,将使用指向对象的指针、消息描述符以及参数调用实际例程。该例程使用描述符索引到类的方法表中,然后调用相应的逻辑。这就是为什么您可以将消息发送到实际上并没有实现消息的对象(从而获得dispatch to doesNotImplement)。Obj-C中的许多灵活性都集中在这个运行时调度功能上

在C++中,它只不过是简单地通过指针调用A函数。使用一个简单的类,方法在编译时被维护在一个静态结构中,编译器可以直接索引到此列表中,以查找实现逻辑的函数指针。因此,在运行时,不需要搜索。在这点上,C++可以比Obj-C更快速地用于方法调度。
那是30000英尺的高度。与C++虚拟方法和现代Obj-C运行时不同。我不能说现代C++的能力以及它如何扩展了它的调度能力。而且,现代的Obj-C运行时非常高效。我认为ARM上的调度可以是少于10条指令或类似的指令。

这是一个有趣的问题,但太宽泛了,特别是由于C++中的方法调用不同,它是一种虚拟的或非虚拟的方法,编译器编译它。@ JuxSd I.DunNo: C++中有2种常见的调用约定。在目标C中,也将有少量(不确定是否超过1)。比较将很简单?一位苹果运行时工程师关于ObjC用于方法分派的函数的一篇古老但不一定过时的文章:@Yakk,因为这并不是所有的OP-askedNote,
foo->method(3)不涉及任何函数(或方法)指针。