ヒープ領域のメモリを使うmalloc的な関数の使用上の注意

「ヒープ領域のメモリを使うmalloc的な関数の使用上の注意」の編集履歴(バックアップ)一覧はこちら

ヒープ領域のメモリを使うmalloc的な関数の使用上の注意」(2010/02/05 (金) 15:33:05) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

「だんだん重くなる」場合は、タスクマネージャ(ctrl+alt+delete)のメモリが一方的に増えていないか確認すること。 C言語ではブロック {   }の中で宣言した変数はスタック上に作られる。 {  }を抜ければスタックの巻き戻しをして{  }に入る前の位置までスタックが指すポインタは巻戻っている。 だから、スタックの使用領域は増えない。(自動変数) 一方、mallocな関数はヒープ領域といって実行時に動的にメモリを使ったり、開放したりするメモリの領域。 この領域は開放しないと再利用できない(スタックは自動的に巻き戻しがおこるが)。 そのプロセスが終了するときにはOSが開放してくれるが、長く動くサービスのようなアプリケーションは通常「固まる」「重い」症状がでる。 そのため、タスクマネージャで動作を確認し解決すべきだ。 OpenCVの関数名に create clone load alloc を含むと疑おう。 メモリーリークの問題にぶちあたらないようにコンパイル、実行したらタスクマネージャでメモリを監視しよう。 このような関数を使ったら release free を使おう。 メモリ解放済みの変数を解放てもエラーにならない。 ただし、 NULLを開放しようとすると Bad argument のエラーのメッセージボックスがでる。 また、cvReleaseeImageなんかはポインタのポインタ。freeはポインタが引数。 void cvRelease( void** struct_ptr ); void cvReleaseMemStorage( CvMemStorage** storage ); void cvReleaseImage( IplImage** image ); void free(void *ptr);//これはCのstring.hのライブラリ関数 終了後固まる場合はカメラの開放ができていないことがおおい。 cvReleaseCapture(&capture); 関連 -[[動画シリーズ コーナーの検出]] -[[動画シリーズ]] -[[ビデオのwhile(1){ }の繰り返しがあるコードの注意点>http://www40.atwiki.jp/chugoku/pages/90.html]] #comment 「今日の訪問数:&counter(today)」 「昨日の訪問数:&counter(yesterday)」 「今までの訪問数:&counter(total)」

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。