メンバ変数は本当に重いのか

 よく言われている(?)ことですが、

メンバ変数は本当に重いのか…というか、重いとして何で重いのかと。

 …というわけで、

手っ取り早くアセンブラのコードを覗いて見る。

…の前に、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」は構造体の頭からメンバまでのオフセット。

なので「構造体(クラス)の構成」や、「メンバ」によって異なります。





 …あ、ついでだから今度はメンバ関数の方も調べてみるかな…?