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


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