编译器优化中的不透明函数调用是什么意思?我在为什么全局变量会在函数调用中给编译器优化带来麻烦?中找到它,而"不透明函数调用"真的让我感到困惑。似乎不透明的函数调用是编译器没有相关信息的函数调用。但这意味着什么?
正如您在问题中提到的,不透明函数调用是对编译器没有先验信息的函数的调用。这意味着编译器不能对此调用的副作用做出任何假设,除非语言定义保证的内容。例如,由于编译器没有其他信息,因此它必须假定函数调用可以修改任何全局变量,并且必须确保在调用之前存储任何局部更改,因此还必须重新加载调用后使用的全局变量。此外,编译器永远不能跳过对此函数的调用,即使调用它看起来毫无用处,因为编译器无法确定这一点。