OpenCV 4.10.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


此类的文档是从以下文件生成的