🎃

「ゼロからのOS自作入門」の リベンジ Part4 🍊

2021/05/31に公開

https://zenn.dev/omiso/articles/8adee2a3a902de
の続き

実施したことに対してのメモを記載していく。

第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