"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 中进行调度,使用指向对象的指针、消息的描述符和参数调用实际例程。该例程使用描述符索引到类的方法表中,然后调用相应的逻辑。这就是为什么你可以将消息发送到实际上没有实现消息的对象(从而调度到 doesNotImplement)。Obj-C 中的大部分灵活性都集中在此运行时调度功能上。
在C++中,它只不过是通过指针简单地调用 a 函数。使用简单的类,方法在编译时以静态结构维护,编译器可以直接索引到此列表中以查找实现逻辑的函数指针。因此,在运行时,不需要搜索。在这方面,C++表面上可以比 Obj-C 更快地进行方法调度。
那是30,000英尺的高度。C++虚拟方法和现代 Obj-C 运行时的情况有所不同。我不能说现代C++的功能以及它如何扩展它的调度能力。此外,现代 Obj-C 运行时非常高效。我认为 ARM 上的调度可以是少于 10 条指令或类似的东西。
相关文章:
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在 COUT 语句中使用 COUT 调用函数
- 调用多个类而不带 if 语句
- 错误:调用 .. at return 语句时没有匹配函数
- 在可变函数调用中执行一次语句
- 在 if 语句中调用重载构造函数失败
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 如果语句表达式调用函数,则需要测试是否为 true
- return 语句,该语句调用在返回 void 的函数中返回 void 的函数
- C++ While(1) 循环内部没有调用 if 语句
- 一个关于在函数中运行未调用语句的非常奇怪的错误
- 为什么我要尝试在一个if语句中调用两个fucntions,但是在第一个完成后它忽略了另一个功能?(C )
- 在返回语句中调用默认构造函数
- 有没有办法查看此语句"Student s3=func(s1, s4)"将调用哪个构造函数?
- 是否可以在一个语句中创建对象并调用方法?
- SQLite3_exec回调未使用c++中的INSERT语句调用
- 从 'if' 语句和 'switch' 语句调用函数
- 语句调用构造函数,但对构造函数不做任何操作——为什么它不能编译
- 为什么不为语句调用 A 的构造函数"A x(A())"?
- 递归返回 if 语句调用