我无法想象编译器在没有左值的情况下会做什么,例如:
数字>>1;
我的直觉告诉我,由于优化,编译器将从编译中丢弃这一行,如果删除优化,会发生什么?
它是否使用寄存器来进行操作?或者它的行为是否像是一个函数调用,因此参数被传递到堆栈,而使用的内存被标记为已释放?或者把它转化成NOP操作?
我能用VS++调试器看看发生了什么吗?
谢谢你的帮助。
最佳答案
在您给出的示例中,它将放弃该操作。它知道该操作没有副作用,因此不需要发出代码来执行该语句以生成正确的程序。如果禁用优化,编译器可能仍会发出代码。如果启用优化,编译器也可能会发出代码——这并不完美。
您可以使用Microsoft编译器的/FAsc
命令行选项查看编译器发出的代码。该选项创建一个列表文件,其中包含编译器的目标代码输出和相关的源代码。
也可以在调试器中使用“视图反汇编”来查看编译器生成的代码。
在优化的代码上使用“视图反汇编”或/FAsc
,我预计不会看到编译器发出的代码。
关于c - C虚拟操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15305096/