今天试了一下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这个字面量都预测出来,直接写到代码里面去了。