1. 程式人生 > >程式閱讀

程式閱讀

環形緩衝區(ringbuffer)
環形緩衝區是生產者和消費者模型中常用的資料結構。生產者將資料放入陣列的尾端,而消費者從陣列的另一端移走資料,當達到陣列的尾部時,生產者繞回到陣列的頭部。
如果只有一個生產者和一個消費者,那麼就可以做到免鎖訪問環形緩衝區(Ring Buffer)。寫入索引只允許生產者訪問並修改,只要寫入者在更新索引之前將新的值儲存到緩衝區中,則讀者將始終看到一致的資料結構。同理,讀取索引也只允許消費者訪問並修改。例如利用海思SDK輸入資料,則海思SDK為生產者。
1.struct ringbuf ringfifo[NMAX];環形緩衝區的地址編號計算函式,如果到達喚醒緩衝區的尾部,將繞回到頭部。環形緩衝區的有效地址編號為:0到(NMAX-1)
2.void ringmalloc(int size)//分配環形緩衝區,每個大小為size
3.malloc的全稱是memory allocation,中文叫動態記憶體分配,用於申請一塊連續的指定大小的記憶體塊區域以void型別返回分配的記憶體區域地址,當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。
4.buffer緩衝器
5.frame type幀型別
6.free函式
與malloc()函式配對使用,釋放malloc函式申請的動態記憶體。(另:對於free§這句語句,如果p 是NULL 指標,那麼free 對p 無論操作多少次都不會出問題。如果p 不是NULL 指標,那麼free 對p連續操作兩次就會導致程式執行錯誤。)
7. int ringput(char buffer, int len) /

向環形緩衝區中放入一個元素/
8. void *memcpy(void *dest, const void *src, size_t n); 從源src所指的記憶體地址的起始位置開始拷貝n個位元組到目標dest所指的記憶體地址的起始位置中