OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

複数のバッファで共有されるメモリブロックを管理する。続き...

#include <opencv2/core/utils/buffer_area.private.hpp>

Collaboration diagram for cv::utils::BufferArea:

公開メンバ関数

 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 が設定されている場合にも有効になる。

使用例:

int * buf1 = 0;
double * buf2 = 0;
cv::util::BufferArea area;
area.allocate(buf1, 200); // buf1 = new int[200];
area.allocate(buf2, 1000, 64); // buf2 = new double[1000]; - aligned by 64
area.commit();
覚え書き
このクラスはプライベートとみなされ、OpenCV自体の内部でのみ使用すべきである。APIは変更される可能性がある。

構築子と解体子の詳解

◆ BufferArea()

cv::utils::BufferArea::BufferArea ( bool safe = false)

クラスのコンストラクタ。

引数
safe安全動作モードを有効にする。各割り当ては独立して実行される。

◆ ~BufferArea()

cv::utils::BufferArea::~BufferArea ( )

クラスのデストラクタ。

割り当てられたすべてのメモリが解放される。バインドされた各ポインタはNULLにリセットされる。

メンバ関数詳解

◆ allocate()

template<typename T >
void cv::utils::BufferArea::allocate ( T *& ptr,
size_t count,
ushort alignment = sizeof(T) )
inline

ポインタをローカル領域にバインドする。

BufferArea は、ポインタへの参照と割り当てパラメータを保存し、実質的にそのポインタと割り当てられたメモリを所有する。この操作は演算子 new と同じパラメータを持ち同じ処理を行うが、割り当ては後の BufferArea::commit 呼び出し時に実行できる点が異なる。

引数
ptr型Tのポインタへの参照。NULLでなければならない
count割り当てるオブジェクトの個数。演算子 new における意味と同じである。
alignment割り当てるメモリのアライメント。演算子 new(C++17)における意味と同じである。sizeof(T) で割り切れなければならない。2のべき乗でなければならない。
覚え書き
安全モードでは割り当ては即座に実行される。

◆ commit()

void cv::utils::BufferArea::commit ( )

メモリを割り当て、バインドされたすべてのポインタを初期化する。

BufferArea::allocate で領域にバインドされた各ポインタは初期化され、要求されたサイズとアライメントを持つメモリブロックを指すように設定される。

覚え書き
安全モードでは、すべての割り当ては BufferArea::allocate によって実行されるため、何も行わない

◆ release()

void cv::utils::BufferArea::release ( )

すべてのメモリを解放し、すべてのポインタのバインドを解除する。

すべてのメモリが解放され、すべてのポインタがNULLにリセットされて領域から切り離され、再び allocatecommit を呼び出せるようになる。

◆ zeroFill() [1/2]

void cv::utils::BufferArea::zeroFill ( )

すべてのバッファをゼロで埋める。

このメソッドを使用する前に BufferArea::commit を呼び出さなければならない

◆ zeroFill() [2/2]

template<typename T >
void cv::utils::BufferArea::zeroFill ( T *& ptr)
inline

バッファの1つをゼロで埋める。

引数
ptr以前に BufferArea::allocate を使って追加されたメモリブロックへのポインタ

このメソッドを使用する前に BufferArea::commit を呼び出さなければならない


このクラス詳解は次のファイルから抽出されました: