不透明函数调用在编译器优化中意味着什么?

Gam*_*dot 0 c compiler-construction concurrency multithreading lock-free

不透明函数调用在编译器优化中意味着什么?我在为什么全局变量会给函数调用中的编译器优化带来麻烦?,而“不透明函数调用”确实让我感到困惑。不透明函数调用似乎是编译器没有任何信息的函数调用。但是这是什么意思?

Joh*_*han 5

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