将内联C的C函数内联吗?

时间:2013-10-09 14:41:37

标签: objective-c c function inline message-passing

  1. 典型的编译器是否会内联一个C函数来进行一个或多个Objective-C方法调用? E.g:

    NSUInteger AACStringGetLength(NSString *string)
    {
        return [string length];
    }
    
  2. 带有解释的彻底证明的奖励积分。

  3. 除递归之外的其他什么可能会阻止编译器内联C函数?

1 个答案:

答案 0 :(得分:2)

假设满足内联的其他要求,可以将

AACStringGetLength()内联到其调用者中。调用Objective-C方法无法阻止C函数的内联。

当然,Objective-C方法本身无法内联,因为编译器无法知道没有异常的动态调度。

可以阻止内联的事情包括:

  • 调用者和被调用者使用不同的翻译单元(即不同的源代码文件),除非您使用某种类型的链接时优化
  • 根据编译器的内联启发法,
  • 调用者的代码在内联后可能会“太大”
  • 被调用者执行的控制流程太复杂,无法编译器的内联机器处理,所以它放弃了