メンバ変数は本当に重いのか
よく言われている(?)ことですが、
メンバ変数は本当に重いのか…というか、重いとして何で重いのかと。
…というわけで、
手っ取り早くアセンブラのコードを覗いて見る。
…の前に、C++の方のコード。
テスト用に書いたものではなくて、
class CTest
{
…
CTest();
…
BYTE pos;
…
};CTest::CTest()
{
…
// 後述のアセンブラコードは↓の一行
pos = 0;
…
};
ちょいと現在開発中のものの一部分なので、
中略部分が多いのは勘弁してください…(汗)
…で、気になるアセンブラの方は…、
こんな感じになりました。
154: pos = 0;
00472EC8 8B 45 EC mov eax,dword ptr [this]
00472ECB C6 40 70 00 mov byte ptr [eax+70h],0
…どうやら、自動的に「this」が呼ばれているようですね。
で、その後に指定のメンバをいじってる感じですか。
ということは、
メンバ変数へのアクセスはこの「this」の1ステップ分だけ損(?)している
ということですかね。
ただ、変数宣言の際の領域確保もバカに出来ない処理なので、一概には言えませんが。
ちなみに、アセンブラの「00472ECB」行の「+70h」は構造体の頭からメンバまでのオフセット。
なので「構造体(クラス)の構成」や、「メンバ」によって異なります。
…あ、ついでだから今度はメンバ関数の方も調べてみるかな…?