Carpe Diem

  Top > スポンサー広告> C++ > メモリリーク  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メモリリーク

2011 - 07/21 [Thu] - 14:36

だんだん処理が重くなったり、最悪落ちてしまう場合はメモリリークの可能性。
怪しい場合はメモリの挙動を確認するといいです。

メモリリークする原因としては、スタック領域とヒープ領域について知っておくとわかりやすい?かも。

◆スタック領域
ローカル変数の保存先。C言語では{  }を抜ければスタックの巻き戻しをして{  }に入る前の位置までスタックが指すポインタは巻戻っている。 だから、スタックの使用領域は増えない。

◆ヒープ領域
グローバル変数の保存先。newとかmallocで確保。この領域は開放しないと再利用できない(スタックは自動的に巻き戻しがおこるが)。
そのプロセスが終了するときにはOSが開放してくれるが、長く動くサービスのようなアプリケーションは通常「固まる」「重い」症状がでる。

というわけなので、ヒープ領域に作成したものは解放する必要があります。

OpenCVの関数名に
create
clone
load
alloc

を含む場合は注意です。ヒープ領域を使用するので解放が必須。

このような関数を使ったら
release
free

を使いましょう。

またメモリ解放済みの変数を解放てもエラーになりませんが、NULLを開放しようとすると Bad argument のエラーのメッセージが出ます。

終了後固まる場合はカメラの解放ができていないことが多いので、
cvReleaseCapture(&capture);

で解放しましょう。

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

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。