gpt4 book ai didi

objective-c - 在 Objective-C 中使用异常的代价是什么?

转载 作者:太空狗 更新时间:2023-10-30 03:28:28 25 4
gpt4 key购买 nike

我的意思是在 clang 或 gcc 版本的当前实现中。

C++ 和 Java 人员总是告诉我,异常不会消耗任何性能,除非它们被抛出。 Objective-C 也是这样吗?

最佳答案

C++ and Java guys always tell me that exceptions do not cost any performance unless they are thrown. Is the same true for Objective-C?

简答题

仅适用于 64 位 OS X 和 iOS。

它们并非完全免费。更准确地说,该模型经过优化以最大限度地降低常规执行期间的成本(将结果转移到其他地方)。

详细解答

在 32 位 OS X 和 iOS 上,即使不抛出异常,也会产生运行时成本。这些架构不使用零成本异常。

在 64 位 OS X 中,ObjC 借用了 C++ 的“零成本异常”。零成本异常的执行开销非常非常低,除非抛出。零成本异常有效地将执行成本转移到二进制大小。这是它们最初未在 iOS 中使用的主要原因之一。启用 C++ 异常和 RTTI 可以将二进制大小增加 50% 以上——当然,我希望这些数字在纯 ObjC 中要低得多,因为展开时要执行的内容更少。

在 arm64 中,异常模型从 Set Jump Long Jump 更改为 Itanium-derived Zero Cost Exceptions(由程序集判断)。

但是,不会编写或准备从异常中恢复的惯用 ObjC 程序,因此您应该将它们的使用保留在您不打算从中恢复的情况下(如果您决定完全使用它们).更多详细信息,请参阅 Clang manual on ARC ,以及引用页面的其他部分。

关于objective-c - 在 Objective-C 中使用异常的代价是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com