分配大塊記憶體與list列表buffer關聯的思考

2021-06-16 20:29:05 字數 1218 閱讀 5463

在wince下某軟體工程中的資料流動流程大致如下,從採集到的資料,然後組包、濾波、已濾波包-->(分發)

1. 顯示快取、顯示

2. 儲存包、儲存

3. 網路包、上傳

4. 截圖

實際上要複雜些,這裡只列舉了主要的功能,工程中存在乙個值得思考的問題,就是資料來回memory copy很頻繁,io開支不小。

因此希望分配一大塊記憶體,它與list結構中的buffer關聯,用佇列方式來迴圈儲存資料,不再過多的用memcpy,也可避免lock/unlock

主要測試**實現如下:

二維資料記憶體分配:

char **darray_new(int row, int col, int size)

}return arr;

}void darray_free(char **arr)

#define array_row 5

#define array_col 8 //與list個數相關

#define array_size 4

struct ecgpack;

listg_list;

char **g_arraymem;

由於行業的特點,考慮到顯示問題,array_row基本不變,實際應用中變化的是組包的個數list(用array_col表示)

呼叫測試:

//包初始化

for(int i=0; iecgpack *p = new ecgpack;

p->bufdata = new char *[array_row];

g_list.push_back(p);

}//記憶體分配

g_arraymem = darray_new(array_row, array_col, array_size);

int j=0;

char c = 0x0a;

list::iterator itr = g_list.begin();

while(itr!=g_list.end())

itr++;

j++;

c++;

}//效果圖,每一行代表的是波形顯示資料,顯示時只需要用知道當前資料移動的指標位置就可以, 避免資料在各個模組之間的流動,而是讓各個模組在list中獲取資料即可.

以上只是乙個應用的初步想法,僅供參考

List容器記憶體分配原則

當採用預設建構函式listvalue new list 例項化乙個list物件時,net framework只是在記憶體中申請了一塊記憶體來存放list物件本身 不包含list當中的items元素 當為list物件新增第乙個item元素時,list物件會申請能儲存4個item元素的記憶體空間,然後將...

C 中大List的記憶體分配

之前在開發中只用到list的時候幾乎就是拿過來就用,從來沒有考慮過list的記憶體分配問題,試想乙個有10萬元素的list的在構造和新增元素時記憶體是如何變化的呢?在msdn上關於list的capacity屬性是這麼解釋的 當我們使用listlist new list 例項化乙個list物件是,ne...

C 中大List的記憶體分配

之前在開發中只用到list的時候幾乎就是拿過來就用,從來沒有考慮過list的記憶體分配問題,試想乙個有10萬元素的list的在構造和新增元素時記憶體是如何變化的呢?在msdn上關於list的capacity屬性是這麼解釋的 也就是說,當我們新增的元素數量小於等於capacity的值時,list是不會...