当前位置: 首页 > 工具软件 > cv_resume > 使用案例 >

CvMemStorage

屠兴旺
2023-12-01

CvMemStorage

typedef struct CvMemStorage

{

struct CvMemBlock* bottom;

struct CvMemBlock* top;

struct CvMemStorage* parent;

int block_size;

int free_space;

} CvMemStorage;

内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据结构的底层结构。它是由一系列以同等大小的内存块构成,呈列表型   ---bottom   域指的是列首,top   域指的是当前指向的块但未必是列尾.在bottom和top之间所有的块(包括bottom,   不包括top)被完全占据了空间;在   top和列尾之间所有的块(包括块尾,不包括top)则是空的;而top块本身则被占据了部分空间   -- free_space   指的是top块剩余的空字节数。新分配的内存缓冲区(或显示的通过   cvMemStorageAlloc   函数分配,或隐示的通过   cvSeqPush, cvGraphAddEdge等高级函数分配)总是起始于当前块(即top块)的剩余那部分,如果剩余那部分能满足要求(够分配的大小)。分配后,free_space   就减少了新分配的那部分内存大小,外加一些用来保存适当列型的附加大小。当top块的剩余空间无法满足被分配的块(缓冲区)大小时,top块的下一个存储块被置为当前块(新的top块)   -- free_space   被置为先前分配的整个块的大小。如果已经不存在空的存储块(即:top块已是列尾),则必须再分配一个新的块(或从parent那继承,见   cvCreateChildMemStorage)并将该块加到列尾上去。于是,存储器(memory storage)就如同栈(Stack)那样, bottom指向栈底,(top, free_space)对指向栈顶。栈顶可通过 cvSaveMemStoragePos保存,通过   cvRestoreMemStoragePos   恢复指向, 通过   cvClearStorage   重置。




 类似资料:

相关阅读

相关文章

相关问答