実行モジュールのサイズを小さくする(C++編) 『実行ファイルサイズを減らす方法』を読んで作成される実行ファイルのサイズの違いに驚きましたが、そのまま使用していたのではC++の恩恵があまり得られませんでした。特にグローバルに宣言した変数のコンストラクタやデストラクタが走らないのは結構辛い。 もともとのLIBCではどのようにしているのかを調べて見ると、どうやら".CRT"というセクションには初期化するための関数へのポインタが入るようです。またグローバルに宣言された変数のデストラクタは atexit という標準関数によって終了時に実行される関数に登録されます。この二つをサポートしてやることによりC++を使用していてもモジュールサイズをかなり小さくすることができます。 typedef void (__cdecl* vfuncv)(void); // VCではこれらのセグメントに初期化処理を行う関