ページへ戻る
印刷
技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし
をテンプレートにして作成 ::
シンクリッジ
xpwiki
:技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし をテンプレートにして作成
開始行:
関数の中で、同じメンバ変数を何度も参照するような場合、ロ...
例えば List1 のようなコードがあったとします。
-List1
#prettify{{
class CTest
{
private:
CClassA *m_pClassA;
public:
void Proc();
}
void CTest::Proc()
{
m_pClassA->SetNumber(1);
m_pClassA->SetCount(2);
m_pClassA->Proc();
}
}}
CTest::Proc 関数で、m_pClassAを3回参照しています。
もし、m_pClassA の値が関数内で変わることがないのであれば...
-List2
#prettify{{
void CTest::Proc()
{
CClassA* const pClassA = m_pClassA; // ローカル変数にコ...
pClassA->SetNumber(1);
pClassA->SetCount(2);
pClassA->Proc();
}
}}
なぜ、わざわざローカル変数にコピーする必要があるかという...
-List3
#prettify{{
void CTest::Proc()
{
CClassA *pClassA;
pClassA = this->m_pClassA
pClassA->SetNumber(1);
pClassA = this->m_pClassA
pClassA->SetCount(2);
pClassA = this->m_pClassA
pClassA->Proc();
}
}}
コンパイラは、変数m_pClassAが保持するCClassAのポインタを...
そのため、プログラマがそれをさせないコードにすればムダは...
賢いコンパイラならこの程度の最適化は勝手にしてくれると考...
コンパイラは、
m_pClassA->SetNumber(1);
という関数の中で、CTest::m_pClassA が変更される可能性があ...
その為、次に m_pClassA を参照する場合も律儀に読み直す必要...
終了行:
関数の中で、同じメンバ変数を何度も参照するような場合、ロ...
例えば List1 のようなコードがあったとします。
-List1
#prettify{{
class CTest
{
private:
CClassA *m_pClassA;
public:
void Proc();
}
void CTest::Proc()
{
m_pClassA->SetNumber(1);
m_pClassA->SetCount(2);
m_pClassA->Proc();
}
}}
CTest::Proc 関数で、m_pClassAを3回参照しています。
もし、m_pClassA の値が関数内で変わることがないのであれば...
-List2
#prettify{{
void CTest::Proc()
{
CClassA* const pClassA = m_pClassA; // ローカル変数にコ...
pClassA->SetNumber(1);
pClassA->SetCount(2);
pClassA->Proc();
}
}}
なぜ、わざわざローカル変数にコピーする必要があるかという...
-List3
#prettify{{
void CTest::Proc()
{
CClassA *pClassA;
pClassA = this->m_pClassA
pClassA->SetNumber(1);
pClassA = this->m_pClassA
pClassA->SetCount(2);
pClassA = this->m_pClassA
pClassA->Proc();
}
}}
コンパイラは、変数m_pClassAが保持するCClassAのポインタを...
そのため、プログラマがそれをさせないコードにすればムダは...
賢いコンパイラならこの程度の最適化は勝手にしてくれると考...
コンパイラは、
m_pClassA->SetNumber(1);
という関数の中で、CTest::m_pClassA が変更される可能性があ...
その為、次に m_pClassA を参照する場合も律儀に読み直す必要...
ページ名: