RArray存放的是固定长度单元值的数组,(单元值最大不超过640bytes)。RPointerArray存放的是指针的数组,即每个单元是一个指针。对RArray,模板参数一般是R和T类型,对于RPointerArray,模板参数可是任意类型。
如果在局部(本地)创建RArray,则需要使用清除栈来确保关闭数组前没有内存因为函数异常退出没泄露,用CleanupCloasePushL( T ), 将数组压入清除栈中,这将确保异常退出时,在数组上调用close(),释放分配给该数组的所有内存。
如果在局部(本地)创建RPointerArray,则它的每一个数据单元需要推入清除栈。或者应该考虑将RPointerArray数组作为类的一个成员,并且在类的析构函数中调用RPointerArray::ResetAndDestroy().
RArray和RPointerArray都实现了Reset()方法,用于释放所有分配于存储元素的内存。 但对RPointerArray而言,还需要删除每个单元指针指向的空间,所以需要使用ResetAndDestroy().
CArray:
所用的CArray类型都是用缓冲器来存储它们的数据,缓冲器(从CBufBase派生而来)提供对内存区域的访问,并且某些方面类似于描述符。然而,描述符用于存储不希望过多改变其最大大小的数据对象,而缓冲器则需要再生命周期中动态增加或收缩。存在两种类型的缓冲器:平面缓冲器和片段缓冲器。
平面缓冲器:在单个堆单元中存放它们的整个数据,一旦该单元满了,则分配新的堆,将老数据和新建数据一起拷贝到新的堆空间中,(realloc)
片段缓冲器:用链表来存数据,好处,不用复制数据, 缺点:不能随机访问,需要遍历链表
粒度:指数组空间满后,每次增长的元素(单元)数量
阅读(1065) | 评论(0) | 转发(0) |