🎃
「ゼロからのOS自作入門」の リベンジ Part4 🍊
の続き
実施したことに対してのメモを記載していく。
第4章 ピクセル描画とmake入門
make 入門
そもそも make とは
make とはコンパイルやリンクなどの作業を自動化するツール。
要は、clang++ や ldd を make で自動化してくれるもの。
Makefile の変数の意味
変数名 | 意味 |
---|---|
TARGET | 生成する最終成果物 |
OBJS | TARGETを津kルうための必要なオブジェクトファイル |
CXXFLAGS | コンパイルオプション |
LDFLAGS | リンクオプション |
vtable(仮想関数のポインタ表)
親クラスのポインタを代入し、親クラスのポインタを介して子クラスの機能を呼び出す。
この機能を実現するには、Clang の場合は vtable を使用する
class Base {
public:
virtual ~Base();
void Func();
virtual void VFunc1(); // virtual をつけると vtable に追加される
virtual void VFunc2();
};
class Sub : public Base {
public:
~Sub();
void Func(); // orveride のキーワードをつけるとエラー
void VFunc1() override;
private:
int x;
};
仮想関数を1つ以上含むクラスのインスタンスの先頭には vtable へのポインタが埋め込まれている。
すなわち、Baseクラスのインスタンスには Base::vtable へのポインタが、Subクラスのインスタンスには Sub::vtable のポインタが埋め込まれている。
<クラスvtable>
関数名 | 値 |
---|---|
~Base | Base::~Base |
VFunc1 | Base::VFunc1 |
VFunc2 | Base::VFunc2 |
<Subクラス vtable>
関数名 | 値 |
---|---|
~Sub | Sub::~Sub |
VFunc1 | Sub::VFunc1 |
VFunc2 | Base::VFunc2 |
Discussion