考虑follwing C++代码的情况下不增加:码量的内联函数
#include <iostream>
using namespace std;
class A
{
int a;
public:
A();
void f();
};
A::A()
{
cout<<"Constructor"<<endl;
}
inline void A::f()
{
cout << "hello\n";
}
int main()
{
A a;
a.f();
a.f();
a.f();
return 0;
}
这里的函数f由我做内联。现在我运行size命令来查找文本部分的大小。我得到了以下输出:
text data bss dec hex filename
2148 312 144 2604 a2c ./1
现在我通过从其定义中删除inline关键字,使函数f非内联。在我又跑了大小命令:
text data bss dec hex filename
2148 312 144 2604 a2c ./1
所以,文本部分的大小是在两种情况下相同的,虽然我预计大小为更大的情况下,f为直列其调用只是通过更换内联代码。
那么,这可能是什么原因?有没有任何例子的尺寸会改变?
'inline'是一个建议,不能保证编译器实际上会内联你的函数。 – 2014-11-14 17:41:45
@CaptainObvlious:但是如果代码大小增加,增加将是可见的。它与对齐有什么关系? – tapananand 2014-11-14 17:42:44
您的编译器可能会忽略'inline',至少就决定是否为内联函数生成代码(虽然inline也影响单定义规则的方式不能忽略)。顺便说一句,几乎愚弄:http://stackoverflow.com/q/1759300/179910 – 2014-11-14 17:43:14