« カフェ&バー トリム | トップページ | 最近の広告塔 »

2008年1月30日 (水)

最適化の不具合!?

VC++で稀に全く予期しないハングに見舞われる時が有る…。

デバッグだと動くがリリースだとハングアップする場合
確保したメモリー外へのアクセスだったりするのが殆だが…
それ以外だと最適化のバグだったりする…。

今まで問題なく動作した関数内で発生するので性質が悪い…。

勿論、最適化を「実行速度」から「デフォルト」などに変更する事で対応可能だ。
この設定は、プロジェクト全体に対してもファイルに対しても可能だが…

でも、負けた気がする!

もっとも「#pragma optimize」で関数毎に最適化を制御する事も…

それでも、負けた気がする!

「volatile」で最適化を制御する手もあるが引数に使用すると
>n 番目の引数を 'unsigned char *volatile ' から
>'unsigned char *& ' に変換できません。
>変換で修飾子が失われます。
なんてエラーが…。

リリースで速度優先が設定できないのは、困り者だ。

場合によるが…
「volatile」の変わりに「static」を付けると上手く行く場合が有る。

取り敢えず自分の場合には、これで回避できた。

今回、ファイルを読み込む関数の内部でエラーが発生した。
extern BOOL FileLoad(LPSTR Name,LPBYTE&Buffer,DWORD&Size);
内部の変数に「static」を付ける事で回避可能だが
呼び出し側の変数に「static」を付ける事でも回避できた…。

LPBYTE Buffer;
FileLoad(Name,Buffer,Size)

static LPBYTE Buffer;
FileLoad(Name,Buffer,Size)
にする事で回避できたと言う事は、スタックに積むのを
とっちっていたようだ…。

実際にマシン語を見ると

良く分からん!(爆)

まあ、プログラムとは、そう言うものさ!(笑)

まあゴクゴク稀なので遭遇しない人も居るだろう。
でも、遭遇すると結構不幸喰らいます…。

少なくとも自分は不幸になりました…。(泣)

|

« カフェ&バー トリム | トップページ | 最近の広告塔 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 最適化の不具合!?:

« カフェ&バー トリム | トップページ | 最近の広告塔 »