2008-06-29 [長年日記]
_ [C++] Checked Iterators
なんだかすごく久々に技術話です。
もっと技術ネタ書きたいのでがんばります。
VC++2003→VC++2005へ移行したところ、
Listのパフォーマンスがかなり落ちるということが分かりました。
最初はListのメモリ配置の局所性が悪くなってキャッシュしづらくなったのかなー、
と思ったのですが、Vectorも遅いということが判明。
そこで Checked Iterators は?という情報をゲット。
イテレータでアクセスするときに配列境界をチェックしてくれる機能だ。
これを使えばJavaみたいに配列範囲外アクセス時に実行時例外を投げることも可能。
これがVS2005で導入(もっと前からあるのかも)されて、デフォルトONなのだ。
_SECURE_SCL を0でdefineしてOFFにするとパフォーマンス改善。
#★↑注:速度とのトレードオフで安全さを捨てるので注意★
イテレータで回すサンプルコードでは数倍から10倍以上変わったとのこと。
その他にも浮動小数点演算のデフォルトオプションがより正確な方へ変わっていたり、
ちょっとした変更がいろいろとある。
上述のイテレータの件を修正してもまだ遅いので、
他にもなんか変わってるやつがいる模様。
容疑者に心当たりがある方はぜひ教えてください。(^^ゞ
2005はMBCS使うと遅くなった気がする。
> _SECURE_SCL を0でdefineしてOFFにするとパフォーマンス改善<br><br>Checked Iteratorsは知らないのですが、<br>パフォーマンスは改善するけど、<br>安全性を捨てているってことはないですか?
結局、原因は静的lib+DLLで外部モジュールをリンクしてたのですが、<br>その際にVC++2005 でプロジェクトの設定で静的に組み込むと遅くなることがあって、<br>それをDLLLoad関数で動的に組み込むと遅くならないらしいです。謎だなぁ。<br><br>あと、これはVC++2003ですが、<br>同じく静的lib+DLLをプロジェクトで静的に組み込んだ場合に、<br>使う側の最適化設定をOFFにすると速くなるという現象が。<br>最適化に失敗してるみたいです。<br><br>んー、なんでかなー。キャッシュまわり???<br><br>>ちゃーりーさん<br>ぉー、wcharとcharでパフォーマンス違うのかー。<br>その辺で話が出てきたら気をつけてみます。<br><br>>matさん<br>checked iterator をONにしていた方が実行時に安全になりますが、<br>・VS2003で動作していたコードであって、検証、テストなどで問題が出ていない<br>・VS2003ではchecked iterator off の状態<br>なので、今までより悪くならないので速度を採る、という選択です。<br>今のコードに関しては検証が十分されてるので良いですが、<br>今後コード修正して範囲外アクセスするようになったときにONだと防げるのを放棄してしまうと。<br>そこはON設定でビルドして自動テストで検証するのがいいかなと思ってます。
「十分安全であることを検証しているコードなので、<br> VS2005で導入された安全機能は不要。<br> 安全機能がパフォーマンスに悪影響を及ぼしているので、<br> 不要な安全機能をオフにした。」<br>ということですね。<br><br>わたしの懸念は、いがいがさんのこの日記をみて、<br>「なんだ、_SECURE_SCL を0でdefineしてOFFにするとパフォーマンス改善するのね。」<br>だけ理解してしまう人がいて、その人のコードが危険に晒されてしまうことです。<br><br>今後安全機能をオフにするネタを扱うときには、ぜひ<br>「安全なコーディングによって、安全を保障している」<br>などの注釈をお願いします。いがいがさんは後進に伝える立場なんですからネ。<br><br>ちなみに<br>・VS2003で動作していたコードであって、検証、テストなどで問題が出ていない <br>・VS2003ではchecked iterator off の状態 <br>は論理的には正当な理由にはなっていないよね。分かっていると思うけど。<br><br>留学期間にみっちり鍛えてあげます。楽しみ♪
>matさん<br>引き続き情報どもです。<br><br>>今後安全機能をオフにするネタを扱うときには、ぜひ <br>>「安全なコーディングによって、安全を保障している」 <br>>などの注釈をお願いします。<br>確かに。目立つように注釈追加しました。<br><br>細かいところから大きなところまで社内留学ではどぞよろしくお願いします。
Appleの過去製品のスペックはここ見れば良いんでないかい? http://www.apple.com/jp/support/datasheet/
おー!こんなページが!!<br>情報どもです!