![]() |
1
9
简短回答 仅限64位OS X和iOS。 他们不是完全自由的。更准确地说,该模型经过优化,以便在定期执行期间(将结果转移到其他地方)将成本降至最低。 详细回答 在32位OS X和IOS上,即使不抛出异常,也会产生运行时成本。这些体系结构不使用零成本异常。 在64位OS X中,Objc移走C++的“零成本异常”。零成本异常的执行开销非常低, 除非投掷 . 零成本异常有效地将执行成本转移到二进制大小。这是他们最初没有在iOS中使用的主要原因之一。启用C++异常和RTTI可以增加二进制大小超过50%——当然,我希望这些数字在纯Objc中要低得多,因为在解卷时执行的更少。 在ARM64中,异常模型从set jump long jump更改为Itanium派生的零成本异常(由程序集判断)。 然而, 惯用的objc程序没有编写或准备从异常中恢复。 ,所以您应该保留它们的用途,以防您不打算从中恢复(如果您决定使用它们的话)。更多详细信息 Clang manual on ARC 以及参考页的其他部分。 |
![]() |
2
6
根据Mac OS X V10.5中Objy-C运行时的2007个版本说明,他们已经重新编写了Objut-C异常的64位实现,以提供“零成本”的测试块和C++的互操作性。 显然,与必须调用setjmp()和其他函数的32位对应块不同,这些“零成本”的try块在输入try时不会受到时间惩罚。显然,扔掉它们“要贵得多”。 这是我在苹果的发行说明中能找到的唯一一点信息,因此我不得不假设这仍然适用于今天的运行时,因此,32位异常=昂贵,64位异常=零成本 |
![]() |
driver · 使用ggplot R绘制热图 2 年前 |
![]() |
ME Desings · 尝试从阵列复制时出现分段错误(核心转储)错误 2 年前 |
![]() |
DevelJoe · PHP异常类中的反向级联? 2 年前 |
![]() |
Sarimm Chaudhry · canot创建AR会话 2 年前 |
![]() |
felipou · Rust错误处理-捕获多个错误 2 年前 |