c 實現迴圈快取buffer

2021-10-01 07:10:14 字數 1069 閱讀 3090

迴圈buffer是一種高效快取方式,一般用於接收固定長度協議使用。如果使用不斷擴充套件的快取操作(見:則我們必須要malloc不斷擴張快取,還會memcpy或memmve操作,效率比較低,而ringbuffer則很好的規避這些低效操作。如果協議長度是固定的,則可以使用ringbuffer作為網路的接收快取。

ringbuffer簡單示例:

#include #include using namespace std;

class ringbuffer

~ringbuffer() }

// 如果剩餘空間不夠,則不寫入

bool write(const char* buf, int size)

if (getfreelen() < size)

if (m_nwritepos >= m_nreadpos)

else

}} else

}m_isfull = m_nwritepos == m_nreadpos;

return true;

} int read(char* buf, int size) //返回實際讀出的資料長度

if (m_nwritepos > m_nreadpos)

else

}else

else

else

}} }

int getfreelen()

if (m_nwritepos < m_nreadpos)

if (m_isfull)

if (m_isempty)

}char* getbuf()

int getwritepos()

int getreadpos()

private:

char* m_pbuffer;

bool m_isfull;

bool m_isempty;

int m_nwritepos;

int m_nreadpos;

int m_nbufsize;

};int main(int argc, char const* ar**)

c 實現高效快取(鏈式buffer)

如果我們從網路端接收的資料是不定長度的,不能提前分配好網路快取大小,則可以選擇使用鏈式快取的實現方式。鏈式快取主要是分配固定大小的快取鏈儲存資料,乙個管理器去管理這些快取鏈。鏈式快取示例 一種鏈式緩衝 ringbuffer是固定長度,不能夠擴充套件,鏈式buffer可以任意擴充 buffer fir...

c 常用buffer實現

1 乙個buffer快取簡單實現 include include include include class buffer m cap m incr m begin m end 0 buffer int getbegin int getend int getcap int getleft int c...

C 實現的Buffer類

寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...