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


此类文档由以下文件生成