在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是不會...