"Objective C" vs "C++":方法调用语句的差异

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

本文关键字:语句 调用 Objective vs C++ 方法      更新时间:2023-10-16

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

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

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

随便可能会有显着差异。当您开始添加优化和其他内容时,就不太清楚了。

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

因此,要在 Obj-C 中进行调度,使用指向对象的指针、消息的描述符和参数调用实际例程。该例程使用描述符索引到类的方法表中,然后调用相应的逻辑。这就是为什么你可以将消息发送到实际上没有实现消息的对象(从而调度到 doesNotImplement)。Obj-C 中的大部分灵活性都集中在此运行时调度功能上。

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

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