- 971 名前:デフォルトの名無しさん [2007/08/19(日) 16:03:05 ]
- 開発環境
Windows XP SP2 VC++6.0 質問内容 Windowsでmallocを行った際の動作は 1.OSがヒープ領域をある程度大きく取る。 2.確保したヒープ領域内からmallocで指定したサイズで領域確保する。 といった2段階の処理が行われている。 という理解でたぶん合っていると思うのですが、現在組んでいるプログラムで、 for( ii = 0 ; ii < hogehoge ; ii++ ) { ・・・ /* 領域確保 */ hogenhoge->hoge[ii] = (char*)malloc( strlen(line) * sizeof(char) ); ・・・ } といった感じに文字列をメモリに格納する処理があるのですが、一部の処理で以下の現象が発生していて対応方法が見つからずに困っています。 デバックコンパイル(正常動作) -> 「1」で確保したヒープ領域を使い切った後に、新しいヒープ領域を確保しに行く 最適化コンパイル(異常動作) -> 「1」で確保したヒープ領域を使い切る前に、新しいヒープ領域を確保しに行く(見た感じでは99%使われていない) デバックコンパイルしたモジュールでは正常動作するのですが、最適化コンパイルを行った場合に上記問題が発生して途中で領域確保に失敗してプログラムが止まってしまっています。 メモリの状況をチェックするのには「VM Validator」というソフトウェアを使用しています。 問題点は最適化コンパイルしたモジュールの一部の処理でヒープ領域を無駄に確保しにいくという点です。 mallocは他の場所でもあちこちで使っているのですが、ここの部分でのみ上記現象が発生していて現在苦しんでいるところです どなたかアドバイスをよろしくおねがいします。
|

|