今天试了一下VC++对于inline的优化是如何做的。主要是因为近段日子在手机上看Effective C++的缘故。
首次试验:
- 在CPP文件中使用inline
- 在H文件中不使用inline
- VC++6.0编译器
- 编译时不指定/O2
命令是:vcrun cl /c /Faoutput.s test1.cpp。
结果:在汇编代码output.s中没有发现内联。仍然调用了GetXFromH和GetXFromCPP。
第二次试验:
- 在CPP文件中使用inline
- 在H文件中使用inline
- VC++6.0编译器
- 编译时不指定/O2
命令是:vcrun cl /c /Faoutput.s test1.cpp。
结果:在汇编代码output.s中没有发现内联。仍然调用了GetXFromH和GetXFromCPP。
第三次试验:
- 在CPP文件中使用inline
- 在H文件中使用inline
- VC++6.0编译器
- 编译时指定/O2
命令是:vcrun cl /O2 /c /Faoutput.s test1.cpp。
结果:在汇编代码output.s中发现了内联。
第四次试验:
- 在CPP文件中不使用inline
- 在H文件中使用inline
- VC++6.0编译器
- 编译时指定/O2
命令是:vcrun cl /O2 /c /Faoutput.s test1.cpp。
结果:在汇编代码output.s中发现了内联。
由上述分析可见,inline只要在头文件中指定即可,另外/O2开关要打开才行。对于VC++ 2005来说,在打开/O2开关的情况下,甚至它把10这个字面量都预测出来,直接写到代码里面去了。

本文通过四个试验探讨了VC++ 6.0编译器对inline关键字的优化处理。试验表明,inline必须在头文件中声明,并且需要开启/O2优化选项才能实现内联。在VC++ 2005中,/O2开关甚至会进一步优化,预测并直接使用字面量。
5123

被折叠的 条评论
为什么被折叠?



