【问题标题】:What does a NULL no-op compile to on GCC/Clang?NULL no-op 在 GCC/Clang 上编译成什么?
【发布时间】:2014-05-02 19:57:48
【问题描述】:

我的代码中有几个调试功能,当指定构建标志 -release 时,所有调用都替换为 NULL(为了性能);例如:

self.condition ? NULL : NULL;

第一个和第二个 NULL 是在预处理中被替换的函数调用。

我的问题是,如果有的话,它会编译成什么?我正在使用 Apple 的 LLVM 5.1;显然对我们来说这是一个无操作,所以这是否意味着它不会从该行生成任何指令?我希望是这样,因为没有充分的理由实际执行任何事情。

【问题讨论】:

  • 检查反汇编,这是唯一确定的方法。

标签: ios objective-c gcc clang llvm


【解决方案1】:

我猜这取决于上下文。

由于self.condition[self condition] 的别名,只有当编译器可以肯定地断言[self condition] 没有副作用时,才能省略调用。如果编译器无法确定没有副作用,则可以将整个语句优化为[self condition];,从而产生轻微的优化。

_condition ? NULL : NULL; 应该被安全地删除,因为没有可能产生副作用的关联方法调用。

【讨论】:

  • 优秀;你说得对,所以我把 attribute ((pure)) 放在我的条件方法上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多