33項 関数はよく考えてからインライン化しよう

関数はよく考えてからインライン化しよう


インライン化しすぎてコードサイズが大きくなると、スラッシングがおきたり、命令キャッシュの低下が起きたりして速度低下を引き起こすことがあります。



本書では、インライン化すべきと思われがちだがインライン化すべきでない例として、コンストラクタとデストラクタをあげています。

下のコードは、Derivedのコンストラクタが空なのでインライン化すべきに見えますが、してはいけません。

class Base
{
public:
	Base();
	~Base();

private:
	string b1, b2;
};

class Derived : public Base
{
public:
	Derived(){} //inline指定すべきに見えるが、してはならない
	~Derived();
private:
	string d1, d2, d3;
};

コンパイラの実装によっては、Derivedのコンストラクタで以下の処理が行われるかもしれないからです。

Derived::Derived()
{
	Base::Base();

	d1.string();
	d2.string();
	d3.string();
}

インライン化を行う関数は、本当に必要なもののみにとどめます。