指針數(shù)據(jù)包
相信大多數(shù)人會將定長數(shù)組換為 指針 , 每次使用時動態(tài)的開辟 CURR_LENGTH 大小的空間, 因為這樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費, 只浪費了一個指針域的空間.
- 數(shù)據(jù)包定義
 
struct point_buffer
{
    int     len;
    char    *data;
};
- 數(shù)據(jù)結(jié)構(gòu)大小
 
考慮對齊, 那么數(shù)據(jù)結(jié)構(gòu)的大小 >= sizeof(int) + sizeof(char *)
- 數(shù)據(jù)包創(chuàng)建
 
但是在開辟內(nèi)存時, 需要調(diào)用兩次malloc ,第一次給結(jié)構(gòu)體分配內(nèi)存,第二次給成員data分配內(nèi)存:
if ((pbuffer = (struct point_buffer *)malloc(sizeof(struct point_buffer))) != NULL)
    {
        pbuffer- >len = CURR_LENGTH;
        if ((pbuffer- >data = (char *)malloc(sizeof(char) * CURR_LENGTH)) != NULL)
        {
            memcpy(pbuffer- >data, "Hello World", CURR_LENGTH);
            printf("%d, %sn", pbuffer- >len, pbuffer- >data);
        }
    }
- 釋放
 
釋放也需要調(diào)用兩次free函數(shù) ,先釋放數(shù)據(jù)域指針,再釋放結(jié)構(gòu)體指針:
/// 銷毀
    free(pbuffer- >data);
    free(pbuffer);
    pbuffer = NULL;
- 優(yōu)點 :不會造成空間的大量浪費,只多使用了一個指針大小的空間
 - 缺點 :開辟空間時需要額外開辟數(shù)據(jù)域的空間,釋放時也需要先釋放數(shù)據(jù)域的空間。假如用戶不知道這個數(shù)據(jù)包創(chuàng)建的具體細(xì)節(jié),有可能會只釋放結(jié)構(gòu)體指針,不釋放數(shù)據(jù)域指針。因此容易造成內(nèi)存泄露。
 
- 
                                C語言
                                +關(guān)注
關(guān)注
183文章
7636瀏覽量
144291 - 
                                指針
                                +關(guān)注
關(guān)注
1文章
484瀏覽量
71645 - 
                                數(shù)據(jù)包
                                +關(guān)注
關(guān)注
0文章
269瀏覽量
25372 
發(fā)布評論請先 登錄
使用UART FIFO緩沖區(qū)時,緩沖區(qū)中的數(shù)據(jù)有時會損壞的原因?
ESP8266有雙緩沖區(qū)嗎?
基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計方案
如何檢測數(shù)據(jù)包丟失?
一文讀懂路由器緩沖區(qū)大小的重要性
CPU與GPU維護(hù)數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作
    
環(huán)形緩沖區(qū)的實現(xiàn)原理
    
緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)
STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)
    
數(shù)據(jù)包的發(fā)送流程
零長數(shù)組如何使用定長包定義數(shù)據(jù)緩沖區(qū)
變長數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)定義
C++環(huán)形緩沖區(qū)設(shè)計與實現(xiàn)
    
交換機(jī)與路由器緩沖區(qū):尋找完美大小
    
RTOS的流緩沖區(qū)機(jī)制解析
    
          
        
        
如何使用指針數(shù)據(jù)包定義數(shù)據(jù)緩沖區(qū)
                
 
           
            
            
                
            
評論