内存和序列

1.CvMemStorage* cvCreateMemStorage(int block_size=0);

创建一个内存存储器,block_size为0表示内存块默认的大小为64K

2.void cvReleaseMemStorage(CvMemStorage** storage)

释放内存存储器的所有空间

3.void cvClearMemStorage(CvMemStorage* storage)

释放的内存返还给内存存储器,并不返还给系统

4.void* cvMemStorageAlloc(CvMemStorage* storage,size_t size)

从一个内存存储器中申请空间

5.CvSeq* cvCreateSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage)

创建序列,第一个参数为采取何种方式来组织数据,第二个为序列的头大小,通常为sizeof(CvSeq),第三个为存储的元素的大小,最后一个为指定的内存存储器,当添加元素时,从该内存存储器申请空间

6.void cvClearSeq(CvSeq* seq)

删除序列,清空序列中的所有元素,但是不会将不再使用的内存返回到内存存取器也不会释放给系统

7.char* cvGetSeqElem(seq,index)

访问序列中的某个元素

8.int cvSeqElemIdx(const CvSeq* seq,const void* element,CvSeqBlock** block=NULL)

检测一个元素是否在序列中,block不为空则存放包含所指元素的块的地址

9.CvSeq* cvCloneSeq(const CvSeq* seq,CvMemStorage* storage=NULL)

深度复制一个序列,并创建一个完全独立的序列结构

10.CvSeq* cvSeqSlice(const CvSeq* seq,CvSlice Slice,CvMemStorage* storage=NULL,int copy_data=0);

cvCloneSeq是对cvSeqSlice的简单包装,可以创建一个新的序列(深度复制),也可以仅仅为子序列创建一个头,和原来的序列公用元素空间;第二个参数可以由cvSlice(a,b)或者CV_WHOLE_SEQ构建,a定义开始,b定义结尾来切片,只有切片之间的元素才会被复制,参数copy_data表示是否进行深度复制

11.void cvSeqRemoveSlice(CvSeq* seq,CvSlice slice)

删除切片(cvslice(a,b))之间的序列

12.void cvSeqInsertSlice(CvSeq* seq,int before_index,const CvArr* from_arr)

插入序列

13.void cvSeqSort

对序列进行排序

14.char* cvSeqSearch

搜索序列中的元素

15.cvSeqInvert(CvSeq* seq)

对序列进行呢操作,不会改变元素的内容,但是会将序列中的元素重新组织,改为逆序

16.char* cvSeqPush(CvSeq* seq,void* element=NULL)

在序列块的尾部添加一元素并返回指向该元素得指针,如果element为NULL则只预留空间给下一个元素

17.char* cvSeqPushFront(CvSeq* seq,void* element=NULL)

在序列头添加一个元素

18.void cvSeqPop

弹出序列尾部元素,如果element为NULL则只弹出元素,不保存弹出的元素

19.void cvSeqPopFront

弹出序列头部的元素

20.void cvSeqPushMulti,void cvSeqPopMulti

压入或者弹出多个元素

21.void cvSeqInsert(CvSeq* seq,i before_index)

插入元素

22.void cvSeqRemove(CvSeq* seq,int index)

删除元素

23.序列的读取和写入:

写操作:

1.保存序列写状态的结构为CvSeqWriter,通过cvStartWriteSeq初始化

CvSeqWriter writer;

cvStartWriteSeq(CV_32SC2,sizeof(CvSeq),sizeof(CvPoint),storage,&writer);

2.写入数据

CV_WRITER_SEQ_ELEM(pt,writer);

3.关闭写操作

CvSeq* seq=cvEndWriteSeq(&writer);

读操作:

1.初始化读

void cvStartReadSeq(const CvSeq* seq,CvSeqReader* reader,int reverse=0);

reverse=0表示正序,1表示逆序

2.返回读状态在序列中的当前位置

cvGetSeqReaderPos(CvSeqReader* reader);

3.设置新的读位置

void cvSetSeqReaderPos(CvSeqReader* reader,int index,int is_relative=0)

最后一个参数为0表示序列的绝对位置,否则为相对位置

4.在序列中向前和向后移动

CV_NEXT_SEQ_ELEM(elem_size,reader)

CV_PREV_SEQ_ELEM(elem_size,reader)

5.读元素并将读状态中的位置向前或向后移动一个元素

CV_READ_SEQ_ELEM(elem,reader)

CV_PEV_READ_SEQ_ELEM(elem,reader)

24.序列和数组的转换

1.序列转换为数组

void* cvCvtSeqToArray(const CvSeq* seq,void* elements,CvSlice slice=CV_WHOLE_SEQ)

最后一个参数为对应序列的切片

2.数组转换为序列

CvSeq* cvMakeSeqHeaderForArray(int seq_type,int header_size,int elem_size,void* element,int total,CvSeq* seq,CvSeqBlock* block)

最后一个参数为序列的内存块结构(block)。这种方法生成的序列和其他方法生成的不一样,不能改变已经生成的序列的数据

内存和序列

时间: 2024-11-25 16:46:43

内存和序列的相关文章

一种高效快速的内存池实现(附源码)

此算法灵感来自于apache内存池实现原理,不过读者如果没有看过apache内存池实现也无关系,因为本算法相对apache内存池算法更为简单而且易懂,个人认为某些场合也更为高效,或许真正到了apache服务器上性能不如,但是这套设计思想应该还是可以借鉴到更多场合的. 我们在调用malloc函数时,操作系统内部会查找一个所谓的空闲链表,当找到足够大的空闲空间时会将内存分割并返回一部分会用户,当然在很大的项目里面有可能会出现链表所有节点都找不到空闲空间的情形,此时操作系统便会不断搜索内存碎片,然后组

Oracle 序列,表空间

oracle 数据库将表空间划分成逻辑区域,形成逻辑结构,一个oracle有一个或多个表空间,一个表空间对应着多个数据库文件,表空间是oracle恢复数据的最小单元 ,容纳着很多数据库实体,聚簇,回退段 表空间作用: 决定数据库的数据分配 备份和恢复 分布于不同数据设备之间,提高性能 CREATE CLUSTER --建立聚簇 CREATE PROCEDURE --建立过程 CREATE SEQUENCE --建立序列 CREATE TABLE --建表 CREATE TRIGGER --建立触

oracle序列中cache是什么

create sequence name increment by x //x为增长间隔 start with x //x为初始值 maxvalue x //x为最大值 minvalue x //x为最小值 cycle //循环使用,到达最大值或者最小值时,从新建立对象 cache x //制定存入缓存(也就是内存)序列值的个数 序列是一数据库对象,利用它可生成唯一的整数.一般使用序列自动地生成主码值.一个序列的值是由特别的Oracle程序自动生成. 如果不设定cycle循环的话,每一个序列号是

【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )

[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 简介 1. 两大内存分类 ( 1 ) DRAM 简介 ( 定期刷新 | 速度慢 | 成本低 ) DRAM 简介 : 1.硬件描述 : DRAM 基本由一个个小电容基本原件组成, 电容的两端保留电荷; 2.优缺点描述 : ① 优点 : 成本很低, 很便宜; ② 缺点 : 需要 定期刷新数据, 速度较慢; a.

Oracle数据库对象(视图、序列、索引、同义词)

1.视图 视图是一张虚表(是表但是没有数据,数据来自于视图所依赖的表) (1)先为用户授权: 管理员登录: 管理员授权给用户SCOTT: (2)视图的创建: (3)优点:简化查询,有的时候只需查询视图即可,不需要再写复杂的查询语句来查询数据. (4)删除视图: drop view 视图名称: 只是删除视图,不会删除表中的数据. 2.序列 序列的功能和auto_increment的功能相同,主要用于提供主键的值,序列输一个数组,存储在内存中,可以提高访问效率. (1)序列的定义: CREATE S

COM接口函数通用Hook方法

本文是我的本科学位论文, 今发表在此, 以示原创之据 第1章 绪论 研究背景 研究意义 相关技术简介 COM概述 COM内存模型描述及C语言和C++语言实现 调用约定 Hook API原理 Windows钩子原理及进程注入 开发及调试环境 第2章 问题抽象及关键技术研究 实验01:通过调试器查看C++类的虚函数表 实验02:通过函数指针调用C++虚函数 实验03:交换两个相同C++类的虚函数表 实验04-1:替换C++虚函数表中的虚函数(__thiscall)地址 实验04-2:替换C++虚函数

Linux0.11内核剖析--内核代码(kernel)--sched.c

1.概述 linux/kernel/目录下共包括 10 个 C 语言文件和 2 个汇编语言文件以及一个 kernel 下编译文件的管理配置文件 Makefile.其中三个子目录中代码注释的将放在后面的文章进行.本文主要对这 13 个代码文件进行注释. 首先我们对所有程序的基本功能进行概括性地总体介绍, 以便一开始就对这 12 个文件所实现的功能和它们之间的相互调用关系有个大致的了解,然后逐一对代码进行详细地注释.本文地址:http://www.cnblogs.com/archimedes/p/l

Hive中跑MapReduce Job出现OOM问题分析及解决

一.引子 今天在跑一段很复杂而且涉及数据量10多年的N个表join的长SQL时,发生了OOM的异常. 由于一个map通常配置只有64MB或者128MB,则在Map阶段出现OOM的情况很少见.所以一般发生在reduce阶段. 但是今天这个异常详细的看后,会发现既不是map阶段,也不是reduce阶段,发现不是执行过程,而是driver提交job阶段就OOM了.Hive中XMLEncoder序列化MapredWork引发OutOfMemoryError XMLEncoder导致java.lang.O

android产品研发(十六)-->开发者选项

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了android中内存对象的序列化方式.由于android开发涉及到不同Activity的数据传递,对于基本数据类型数据的传递是没有问题的,但是一旦涉及到复杂数据类型,就需要将数据序列化以便传输,在文章中我们主要讲解了两种数据序列化的方式:实现Serializable接口和实现Parcelable接口,同时也比较了它们各自的优缺点和实现方式.具体关于内存对象序列化方面的知识可参考:android产品研发(十五)–>内存对象序列化 本文主要介绍A