VC++ inline 优化的试验

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天试了一下VC++对于inline的优化是如何做的。主要是因为近段日子在手机上看Effective C++的缘故。

==test1.h==
class Test1
{
public:
    Test1();
    ~Test1();
    inline int GetXFromH() { return x; }
    inline int GetXFromCPP();
private:
    int x;
};
==test1.cpp==
#include “test1.h”
#include <stdio.h>
 
Test1::Test1()
{
    x = 10;
}
 
Test1::~Test1()
{
    x = -1;
}
 
inline int Test1::GetXFromCPP()
{
    return x;
}
 
int main(void)
{
    Test1 t;
    printf(“%d\n”, t.GetXFromH());
    printf(“%d\n”, t.GetXFromCPP());
    return 0;
}
==

首次试验:
- 在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这个字面量都预测出来,直接写到代码里面去了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值