考慮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