OpenCV 記憶體管理

2021-07-11 15:21:53 字數 1193 閱讀 1860

一、概述

opencv使用記憶體儲存器(memory storage)來統一管理各種動態物件的記憶體。記憶體儲存器在底層被實現為乙個有許多相同大小的記憶體塊組成的雙向鍊錶,通過這種結構,opencv可以從記憶體儲存器中快速地分配記憶體或將記憶體返回給記憶體儲存器。

二、相關函式

1、建立記憶體塊

cvmemstorage* cvcreatememstorage( int block_size=0 );

block_size

儲存塊的大小以位元組表示。如果大小是 0 byte, 則將該塊設定成預設值 -- 當前預設大小為64k.

函式 cvcreatememstorage 建立一記憶體塊並返回指向塊首的指標。起初,儲存塊是空的。頭部(即:header)的所有域值都為 0,除了 block_size 外。

2、釋放記憶體塊

void cvreleasememstorage( cvmemstorage** storage );

storage   指向被釋放了的儲存塊的指標

函式 cvreleasememstorage 釋放所有的儲存(記憶體)塊 或者 將它們返回給各自的 parent(如果需要的話)。 接下來再釋放 header塊(即:釋放頭指標 head 指向的塊 = free(head))並清除指向該塊的指標(即:head = null)。在釋放作為 parent 的塊之前,先清除各自的 child 塊。

3、清空記憶體儲存塊

void cvclearmemstorage( cvmemstorage* storage );

storage

儲存儲存塊

函式 cvclearmemstorage 將儲存塊的 top 置到儲存塊的頭部(注:清空儲存塊中的儲存內容)。該函式並不釋放記憶體(僅清空記憶體)。假使該記憶體塊有乙個父記憶體塊(即:存在一記憶體塊與其有父子關係),則函式就將所有的塊返回給其 parent.

4、在儲存塊中分配以記憶體緩衝區

void* cvmemstoragealloc( cvmemstorage* storage, size_t size );

storage  記憶體塊.

size   緩衝區的大小.

函式 cvmemstoragealloc 在儲存塊中分配一記憶體緩衝區。該緩衝區的大小不能超過記憶體塊的大小,否則就會導致執行時錯誤。緩衝區的位址被調整為cv_struct_align 位元組 (當前為 sizeof(double)).

OpenCV記憶體池管理(一)

opencv提供了一套高效的記憶體管理方案,提公升了記憶體申請速率,減少了記憶體碎片,能夠很好的提公升程式的穩定性,同時支援執行緒同步。下面是對opencv記憶體管理原始碼中alloc.cpp的主要函式fastmalloc 和fastfree 的解讀研究。opencv3.1中 包括之前的版本 預設是...

OpenCV中mat記憶體管理

opencv中大部分物件都像被std share ptr包裝過的行為一樣,你不需要自己手動釋放資源。同標準庫的智慧型指標一樣,你不需要自己去手動刪除指標,也許對於被智慧型指標管理的物件,根本就不建議你直接使用指標。所有的物件都應該建立在棧上,使用 object obj 的方式獲得物件,而不應該使用o...

opencv記憶體管理器1

1.opencv使用記憶體儲存器memory storage 來統一管理各種動態物件的記憶體,在底層被實現為乙個有許多 相同大小的記憶體塊組成的雙向鍊錶,opencv可以快速的分配記憶體給內部儲存器。以下是常用的操作內部儲存器 的函式。2.序列是記憶體儲存器中的可以儲存的一種物件,openc中序列c...