【问题标题】:What does an opaque function call mean in compiler optimization?编译器优化中的不透明函数调用是什么意思?
【发布时间】:2018-06-13 04:32:04
【问题描述】:

编译器优化中不透明的函数调用是什么意思?我在Why do global variables cause trouble for compiler optimizations in function calls? 中找到了它,“不透明的函数调用”真的让我很困惑。 似乎不透明的函数调用是编译器没有关于它的信息的函数调用。但这是什么意思?

【问题讨论】:

  • @RudyVelthuis 如果没有原型和调用约定,编译器根本无法使用调用。不透明函数的问题是缺乏关于副作用的知识。
  • 谢谢。那么编译器是如何处理不透明的函数调用的?你能举一个关于这个问题的例子吗?我不太理解这个问题。

标签: c multithreading concurrency compiler-construction lock-free


【解决方案1】:

正如您在问题中提到的,不透明的函数调用是对编译器没有先验信息的函数的调用。这意味着编译器不能对这个调用的副作用做出任何假设,除非是语言定义所保证的。例如,由于编译器没有其他信息,它必须假定函数调用可以修改任何全局变量,并且必须确保在调用之前存储任何局部更改,它还必须重新加载调用后使用的全局变量。此外,编译器永远不会跳过对该函数的调用,即使调用它看起来毫无用处,因为编译器无法确定这一点。

【讨论】:

  • 谢谢。你的回答似乎符合我的要求。我将重新阅读论文并根据您的回答重新思考。如果我还有问题,我会再问你一次。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2013-05-06
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多