一、動(dòng)態(tài)數(shù)組實(shí)現(xiàn)通常有兩種方式:
1、用一個(gè)單獨(dú)的堆單元作為連續(xù)的緩沖區(qū)來保存數(shù)組元素,通常針對(duì)量小和數(shù)組大小變化較小的情況
2、采用多段緩沖區(qū),然后通過雙向鏈表來管理,通常是針對(duì)量大并數(shù)組大小變化頻繁的情況使用。
注意:因?yàn)閯?dòng)態(tài)數(shù)組的容量是動(dòng)態(tài)變化的,當(dāng)插入一條新的數(shù)組元素時(shí),數(shù)組需要再分配堆內(nèi)存,而再分配的堆內(nèi)存的數(shù)目是由粒度來決定的。選取合適的粒度最重要,取得太小時(shí),需要頻繁進(jìn)行分配,取得太多時(shí)又會(huì)造成存儲(chǔ)空間的浪費(fèi)。
二、Symbian OS 中的CArrayX
1、Fix,意味著數(shù)組中的元素具有相同的長(zhǎng)度,而且是被復(fù)制的,所以它們可以保存在數(shù)據(jù)緩沖區(qū)內(nèi)。
2、Var,代表數(shù)組中元素具有不同長(zhǎng)度,每個(gè)元素都被保存在自己的堆單元中,數(shù)組緩沖區(qū)內(nèi)包含的是指向這些元素的指針。
3、Pak,表明這是一個(gè)壓縮數(shù)據(jù),其中元素都具有不同長(zhǎng)度。保存在數(shù)組緩沖區(qū)內(nèi),每個(gè)元素前部都有它的長(zhǎng)度信息。
4、Ptr,代表CBase派生類對(duì)象指針的數(shù)組。
注:如果級(jí)組類名以”Flat“結(jié)尾,使用的是平坦緩沖區(qū),以”Seg“結(jié)尾,使用段緩沖區(qū)。
內(nèi)存布局:

三、RArray<class T>和RPointerArray<class T>
屬于R類,需要調(diào)用Close()或者Reset()函數(shù)清除。當(dāng)數(shù)組使用完成后,必須考慮這些對(duì)象的所有權(quán)。如果對(duì)象還在其他地方被持有,那么調(diào)用Close()或者Reset()清除即可,否則需要調(diào)用ResetAndDestory()或者針對(duì)所有對(duì)象調(diào)用Delete進(jìn)行釋放資源。
基于性能方面考慮,通常用RArray代替前面的類,因?yàn)镽Array是基于R類的,具有更好的性能。并且RArray利用TLinearOrder<class T>提供更好的排序和查詢等算法,同時(shí)提供了擴(kuò)充的功能。