0
  1. 典型的编译器会内联一个调用一个或多个 Objective-C 方法的 C 函数吗?例如:

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

  3. 除了递归之外,还有哪些其他事情可能会阻止编译器内联 C 函数?

4

1 回答 1

2

AACStringGetLength()假设满足内联的其他要求,可以内联到它的调用者。对 Objective-C 方法的调用不会阻止 C 函数的内联。

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

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

  • 调用者和被调用者位于不同的翻译单元(即不同的源代码文件)中,除非您使用某种链接时优化
  • 根据编译器的内联启发式,调用者的代码在内联后可能会“太大”
  • 被调用者执行的控制流过于复杂,编译器的内联机制无法处理,因此它放弃了
于 2013-10-09T21:23:51.620 回答