概要
- Windowsのx86-32エミュレータでの珍事件の紹介
- バイナリ変換によるJIT的な高速化の説明
- 64KBのメモリ初期化で起きた非効率な最適化事例
- チームが特別な変換コードを追加した経緯
- 著者Raymondの経歴とThe Old New Thingについて
Windowsエミュレータとバイナリ変換の逸話
- Windowsは過去に x86-32以外のプロセッサ 上で x86-32エミュレーション を提供
- このエミュレータは バイナリ変換 を用い、 ネイティブコード生成 による高速化を実現
- x86-32コードを バイトコード と見なし、エミュレータが JITコンパイラ の役割
- あるプログラムが 約64KBのスタックメモリ確保と初期化 を必要とする事例発生
- 通常は スタックプローブ で空き確認後、スタックポインタを65536減算
- 小さなループでメモリ初期化が一般的
- 使用された コンパイラ はループを展開し、
- 65,536回分の「メモリへ1バイト書き込み」命令 を個別に生成
- 各命令は 4バイト、合計で 256KBのコード が64KBのデータ初期化に使用
- エミュレータ開発チームはこの非効率さに衝撃を受け、
- 変換器に特別な処理 を追加し、該当関数を 効率的なループ に置換
Raymond ChenとThe Old New Thing
- 著者 Raymond Chen は 30年以上Windowsの進化 に関与
- 2003年にWebサイト The Old New Thing を開設
- サイトは予想以上の人気を獲得し、本人も驚愕
- サイト内容をもとに書籍 The Old New Thing (Addison Wesley 2007) も出版
- 時折 Windows Dev Docs Twitter アカウントにも登場
- 有益ではないが面白いWindowsの裏話を投稿