![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
複数のバッファで共有されるメモリブロックを管理する。続き...
#include <opencv2/core/utils/buffer_area.private.hpp>
公開メンバ関数 | |
| BufferArea (bool safe=false) | |
| クラスのコンストラクタ。 | |
| ~BufferArea () | |
| クラスのデストラクタ。 | |
| template<typename T > | |
| void | allocate (T *&ptr, size_t count, ushort alignment=sizeof(T)) |
| ポインタをローカル領域にバインドする。 | |
| void | commit () |
| メモリを割り当て、バインドされたすべてのポインタを初期化する。 | |
| void | release () |
| すべてのメモリを解放し、すべてのポインタのバインドを解除する。 | |
| void | zeroFill () |
| すべてのバッファをゼロで埋める。 | |
| template<typename T > | |
| void | zeroFill (T *&ptr) |
| バッファの1つをゼロで埋める。 | |
複数のバッファで共有されるメモリブロックを管理する。
このクラスは、1つの大きなメモリブロックを割り当て、それを互いに重ならない複数の小さなバッファに分割できるようにする。安全モードでは各バッファの割り当てが独立して実行され、このモードによりvalgrindやmemory sanitizerを用いた動的メモリアクセスの計測が可能になる。
安全モードはコンストラクタで明示的にONに切り替えられる。また、memory sanitizerサポートを有効にしてコンパイルした場合や、実行時に環境変数 OPENCV_BUFFER_AREA_ALWAYS_SAFE が設定されている場合にも有効になる。
使用例:
| cv::utils::BufferArea::BufferArea | ( | bool | safe = false | ) |
クラスのコンストラクタ。
| safe | 安全動作モードを有効にする。各割り当ては独立して実行される。 |
| cv::utils::BufferArea::~BufferArea | ( | ) |
クラスのデストラクタ。
割り当てられたすべてのメモリが解放される。バインドされた各ポインタはNULLにリセットされる。
|
inline |
ポインタをローカル領域にバインドする。
BufferArea は、ポインタへの参照と割り当てパラメータを保存し、実質的にそのポインタと割り当てられたメモリを所有する。この操作は演算子 new と同じパラメータを持ち同じ処理を行うが、割り当ては後の BufferArea::commit 呼び出し時に実行できる点が異なる。
| ptr | 型Tのポインタへの参照。NULLでなければならない |
| count | 割り当てるオブジェクトの個数。演算子 new における意味と同じである。 |
| alignment | 割り当てるメモリのアライメント。演算子 new(C++17)における意味と同じである。sizeof(T) で割り切れなければならない。2のべき乗でなければならない。 |
| void cv::utils::BufferArea::commit | ( | ) |
メモリを割り当て、バインドされたすべてのポインタを初期化する。
BufferArea::allocate で領域にバインドされた各ポインタは初期化され、要求されたサイズとアライメントを持つメモリブロックを指すように設定される。
| void cv::utils::BufferArea::release | ( | ) |
すべてのメモリを解放し、すべてのポインタのバインドを解除する。
すべてのメモリが解放され、すべてのポインタがNULLにリセットされて領域から切り離され、再び allocate と commit を呼び出せるようになる。
| void cv::utils::BufferArea::zeroFill | ( | ) |
すべてのバッファをゼロで埋める。
このメソッドを使用する前に BufferArea::commit を呼び出さなければならない
|
inline |
バッファの1つをゼロで埋める。
| ptr | 以前に BufferArea::allocate を使って追加されたメモリブロックへのポインタ |
このメソッドを使用する前に BufferArea::commit を呼び出さなければならない