OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
cv::utils::BufferArea 類參考

管理由多個緩衝區共享的記憶體塊。 更多...

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

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)
 用零填充其中一個緩衝區。
 

詳細描述

管理由多個緩衝區共享的記憶體塊。

此類允許分配一個大的記憶體塊,並將其拆分為幾個較小的非重疊緩衝區。 在安全模式下,每個緩衝區分配都將獨立執行,此模式允許使用 valgrind 或記憶體清理程式進行動態記憶體訪問檢測。

可以在建構函式中顯式啟用安全模式。 在使用記憶體清理程式支援進行編譯時,或在執行時使用環境變數 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]; - 按 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

用零填充其中一個緩衝區。

引數
ptr指向先前使用 BufferArea::allocate 新增的記憶體塊的指標

在使用此方法之前,必須呼叫 BufferArea::commit


此類文件由以下檔案生成