はんねり
※半分寝ている状態、の意。
どのコンパイラで FreeDOS カーネルを作るべきか
というような検証を先週末にダラダラやってたり。しかも出先で。
内容は FreeDOS の kernel 2035a を各種コンパイラでコンパイルし、そのファイルサイズとメモリ常駐量(というか起動時の空き基本メモリ)を比較する、というものです。
とりあえず kernel.sys のファイルサイズから。ふたつ数値が並べてありますが、UPX圧縮時/無圧縮時のサイズとなっております。
当然ながらファイルサイズの小さいほうがよりうれしい結果となります。
Turbo C 2.0 | Turbo C++ 1.01 | Borland C++ 5.0 | Visual C++ 1.52 | OpenWatcom 1.3 | |
---|---|---|---|---|---|
FAT16,8086 | 42288/73348 | 42482/73508 | 42177/72758 | 43956/72902 | 42967/64557 |
FAT16,186 | 42147/71428 | 42271/71412 | 41898/70422 | 43642/71116 | 42758/63333 |
FAT16,386 | 42601/62389 | ||||
FAT32,8086 | 44534/78126 | 44850/78414 | 44455/77536 | 46336/77280 | 45378/68602 |
FAT32,186 | 44395/76142 | 44608/76238 | 44204/75136 | 45985/75430 | 45192/67326 |
FAT32,386 | 45074/66158 |
続いて各カーネル起動時の基本メモリ。これは起動時に vmap で表示されたコンベンショナルメモリの最大空きエリアのサイズ。数値が大きいほどうれしい。
config.sys は以下の通り。
rem dos=high rem device=fdxms.sys (or himem.sys) files=20 buffers=20 rem screen=0x12 Shell=a:\command.com a:\ /P /E:256
command.com は ke3035a 付属の FreeCom 0.82 pl 3 XMS_Swap を使っています。XMS ドライバも何も突っ込んでないので FreeCom 全体がメモリに残りまくり(約80Kバイト)。
参考として MS-DOS 6.2/V と Windows98SE 日本語版の結果も載せておきます(条件を同じにするため、DOS 付属の COMMAND.COM ではなく FreeCOM を使用しています)。
Turbo C 2.0 | Turbo C++ 1.01 | Borland C++ 5.0 | Visual C++ 1.52 | OpenWatcom 1.3 | MS-DOS 6.2/V (FAT16) Win98SE JPN (FAT32) | |
---|---|---|---|---|---|---|
FAT16,8086 | 504416 | 504048 | 504720 | 507104 | 510656 | 510880 |
FAT16,186 | 505680 | 505408 | 506240 | 508240 | 511344 | |
FAT16,386 | 511984 | |||||
FAT32,8086 | 499856 | 499312 | 500112 | 502928 | 506704 | 494032 |
FAT32,186 | 501168 | 500752 | 501696 | 504128 | 507440 | |
FAT32,386 | 508272 |
やや主観的な不等号づけで評価すると、こんな感じでしょうか。(左側にいくほどよい評価)
- カーネルサイズ(無圧縮):WC<<<<<BC5<VC15<TC2<TCPP
- カーネルサイズ(UPX 後):BC5<TC2<TCPP<WC<<VC15
- 基本メモリの空き容量 :WC>>VC15>>BC5>TC2>TCPP
OpenWatcom で作った FAT16 カーネルが MS-DOS に匹敵する空きメモリ量だったりすることにやや驚いたのでした。意外とやるもんですね。UPX 時の圧縮率がいまいちですが、メモリが手狭な DOS 環境では空きメモリの多さが正義と申せましょう。
ということで個人的には OpenWatcom おすすめ。
…ねむすぎる。すこし仮眠を――起きられるのか?