2009/03/31
マイクロソフト vs. IBM
sqliteはamalgamationと呼ぶ冗談みたいな最適化をしています。
この結果、amalgamation版のsqlite.cが肥大化しています。Visual C++のデバッガでsqlite.cをまともにステップ実行できない報告があがっています。VC(Visual Studio 2008)のデバッガのテキストエディタは2^16行までしか扱えないようです。
昔のWindowsのメモ帳で似たような話(16ビットアプリの亡霊)を聞いた記憶がありますが、まさかVisual Studio 2008で聞くとは思っていませんでした。
AIX(IBMのUnix)にも似た話があるようです(下記参照)。
AIXのCコンパイラxlcは65536行以上のソースコードのデバッグ情報を適切に出力できないようです。
上記リンク先のコアダンプの話は、IBMらしい話が続いています。xlcで最適化コンパイルした時だけコアダンプする報告があがっていて、結局、*pMem=ctx.s こういうコードを memcpy(pMem, &ctx.s, sizeof(ctx.s)) こう書き換えたら落ちなくなった、というオチがついています(*)。IBMの考える最適化はコードを消してしまうことなのでしょう。こうすれば環境にも優しいですし、ベンチマークでも良い記録がでます。
(*) ちなみにただの構造体です。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/ms-vs-ibm/tbping