2015年10月11日日曜日

C++のインスタンス生成処理

今日はC++です。
正直苦手としていた言語ですが、ひょんなことから始めました。

で、オブジェクトの生成とかどうしてるのか気になりますね。
気になるんです。

具体的には下記1点

  • 配置newしたときにデータと実行コードはどこに置かれるのか
気になりますねー

OS作るときは、データやコードがメモリのどこに配置されるかすごく気を使うので知っておきたいです。

どこに置かれるか、機械語を見てみましょう。
機械語を見ればわかるのです。バイナリです。
とりあえずソースを置いときます。




こんな感じにMain.cppからTestClass.cppをnewするだけです。
じゃあ機械語レベルではどーなってるのって話ですね。

みてみましょ。(画像はすべてクリックで拡大可能)

まずはMain.cppのオブジェクト生成部


TestClass.cppの TestClass::TestClass(char *s);メソッド(コンストラクタ)


見てみた結果

  • 実行コードはメモリ上に1セットしかない。
  • データ領域だけオブジェクトの数分配置される。
ということでした。

すっきり。