OpenCV記憶體池管理(一)

2021-07-15 00:23:00 字數 1042 閱讀 5414

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

opencv3.1中(包括之前的版本),預設是不啟用記憶體池分配的。我的辦法是對原始碼修改後重新編譯。步驟如下:

在alloc.cpp中新增標頭檔案#include ;

將巨集cv_use_system_malloc改為0;

將autolock在該cpp中的名字替換為其他名字,如tautolock。

重新編譯後就可以使用了。

記憶體池首先分配了乙個

巨大記憶體塊,大小為1mb,然後在其中劃分為乙個個的

小塊,每個小塊大小為16kb,每個小塊又可按照給定的記憶體大小分配表劃分為29個

型別,將每個小塊按型別進行大小

區段均分。申請記憶體時首先判斷該大小的記憶體屬於哪個型別,然後再在某個小塊上進行分配工作。

static const int binsizetab[max_bin+1] =

;//29種型別

記憶體分配查詢表malloctables

struct malloctables

struct block

struct bigblock

struct blockpool

struct threaddata

4、記憶體池結構圖

OpenCV 記憶體管理

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

C 記憶體管理 記憶體池

很多內容來自於網際網路,如有侵權,請告知。另外,從 收穫很多,在此表示感謝。我們寫程式經常需要 malloc 和 new 一塊記憶體出來,這些記憶體是在堆上進行分配的,在堆上分配的記憶體和在棧上分配的記憶體不同,可以長久的儲存。堆是什麼 可以把你的程序空間 想象成 4g 大小的記憶體 32 為機子上...

C 記憶體管理 記憶體池

引子 一 單獨類記憶體池 classa intget void operator new size t void operator delete void size t private a next static a freestore 指向可用首位址 static const int achunk...