對buffer的簡單理解

2021-05-23 11:27:22 字數 1437 閱讀 8476

定義了乙個bufffer:

byte   buf=new   byte[0x100000]

說明:首先定義乙個buffer,說白了就是申請一塊記憶體空間,new返回的是乙個指標,所以這裡的宣告有錯的,應該這樣:

byte   *pbuf   =   new   byte[0x100000];

如果申請成功,則返回了該記憶體空間的首位址,如果申請失敗則返回null。

1。如何向這個buffer寫入資料?

說明:如果是一般的字元資料,那麼可以用strcpy/strncpy,不過看你申請了這麼多,應該是二進位制資料吧,那可以使用memcpy函式。

舉例:寫入資料到第100個記憶體空間

byte   *pbuf   =   new   byte[0x100000];

memset(pbuf,0,0x100000);//初始化buffer

byte   data[3]=;

memcpy(pbuf+100,data,sizeof(data));

memcpy(&(pbuf[100]),data,sizeof(data));//和上面的結果一樣

//這塊buffer的第101,102,103位元組的資料變成了1,2,3

//即:pbuf[100]==1,pbuf[101]==2,pbuf[102]==3

2。能從buffer中的任意位置寫入資料麼?比如首位址加偏移量。

上面的例子已經說明問題了。

3。如何讀出buffer的資料?

讀出資料也很簡單:

byte   data[3];

memcpy(data,pbuf+200,sizeof(data));

4。如何測定這個buffer的實際使用長度?

如果你的資料都是非0的資料,那麼可以使用strlen,但是如果裡面有0的資料就不能使用了,此時你可以在前面寫入資料的時候做乙個計數,因為你每次寫 入多少位元組的資料你是知道的。

舉例:

int   ncount   =   0;

byte   *ptemp   =   pbuf;//臨時指標

byte   data1[3]   =   ;

byte   data2[3]   =   ;

memcpy(ptemp,data1,sizeof(data1));

ncount   +=   sizeof(data1);

memcpy(ptemp,data2,sizeof(data2));

ncount   +=   sizeof(data2);

此時的有效資料長度就是ncount的值

5。如何清空這個buffer的內容?

memset(pbuf,0,0x100000);

最後使用buffer結束後記得釋放記憶體:

delete   pbuf;

這裡實際上就是乙個指標的應用~

buffer 與cache 的理解

buffer 與cache 通過 man free buffers memory used by kernel buffers buffers in proc meminfo cache memory used by the page cache and slabs cached and srecl...

buffer與cache的理解

也就是說buffer是用於存放要輸出到disk 塊裝置 的資料的,而cache是存放從disk上讀出的資料。這二者是為了提高io效能的,並由os管理。釋放掉被系統cache占用的資料 echo 3 proc sys vm drop caches 可以通過讀取乙個大檔案來測試cache。free命令的...

簡單理解一下cache和buffer

簡單理解一下cache和buffer 在 oracle 和 mysql 學習過程中 經常遇到這兩個概念 今天特意查了一下 理解上比較簡單 記錄在此 以備忘記 cache cache,是用來加速讀取的一種方法。目的是加速讀取 物理上,有cpu管理的l1 cache,l2 cache 和 memory裡...