<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用指針數據包定義數據緩沖區

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 15:01 ? 次閱讀

指針數據包

相信大多數人會將定長數組換為 指針 , 每次使用時動態的開辟 CURR_LENGTH 大小的空間, 因為這樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費, 只浪費了一個指針域的空間.

  • 數據包定義
struct point_buffer
{
    int     len;
    char    *data;
};
  • 數據結構大小

考慮對齊, 那么數據結構的大小 >= sizeof(int) + sizeof(char *)

  • 數據包創建

但是在開辟內存時, 需要調用兩次malloc ,第一次給結構體分配內存,第二次給成員data分配內存:

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);
        }
    }
  • 釋放

釋放也需要調用兩次free函數 ,先釋放數據域指針,再釋放結構體指針:

/// 銷毀
    free(pbuffer- >data);
    free(pbuffer);
    pbuffer = NULL;
  • 優點 :不會造成空間的大量浪費,只多使用了一個指針大小的空間
  • 缺點 :開辟空間時需要額外開辟數據域的空間,釋放時也需要先釋放數據域的空間。假如用戶不知道這個數據包創建的具體細節,有可能會只釋放結構體指針,不釋放數據域指針。因此容易造成內存泄露。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7542

    瀏覽量

    131032
  • 指針
    +關注

    關注

    1

    文章

    474

    瀏覽量

    70386
  • 數據包
    +關注

    關注

    0

    文章

    231

    瀏覽量

    24136
收藏 人收藏

    評論

    相關推薦

    使用UART FIFO緩沖區時,緩沖區中的數據有時會損壞的原因?

    我在使用 UART FIFO 緩沖區時遇到了以下問題。 問題描述: 當通過兩個 UART 通道使用完整的 UART FIFO 緩沖區并通過兩個通道進行通信時,緩沖區中的數據有時會損壞,
    發表于 03-06 06:59

    緩沖區數據如何轉換成數組

    各位高手,請問下我從儀器中讀取出來數據緩沖區后,如何能把這些數據轉換成一個數組,格式應該怎樣去轉換。。。。半天也弄不出來 幫幫忙吧先謝謝大家了。。。緩沖區
    發表于 02-22 17:05

    攝像頭采集到的數據遠遠超過了發送緩沖區數據,可以不用緩沖區嗎?

    做了一個攝像頭的實驗,用的是stm32f103,MCU把攝像頭采集到的數據通過串口發送到PC。但我現在比較糊涂的是,攝像頭采集到的數據遠遠超過了發送緩沖區數據,可以不用
    發表于 11-05 22:06

    STM32進階之串口環形緩沖區實現

    兩個指針,一個指向列隊頭,一個指向列隊尾。指向列隊頭的指針(Head)是緩沖區可讀的數據,指向列隊尾的指針(Tail)是
    發表于 06-08 14:03

    杰杰帶你解讀【機智云】環形緩沖區源碼

    = NULL; rb->rbCapacity = 0;return 0;}把這些指針指向NULL,但是環形緩沖區本身地址的數據是不會被清除的,只是表明了這些地址可以被重復使用了而已
    發表于 07-17 14:58

    MCU進階之串口環形緩沖區實現

    測試數據沒有發生丟現象。補充對于現在的階段,杰杰我本人寫代碼也慢慢學會規范了。所有的代碼片段均使用了可讀性很強的,還有可移植性也很強的。我使用了宏定義來決定是否開啟環形緩沖區的方式來
    發表于 08-17 13:11

    STM32串口環形緩沖區的實現

    一個數組,只不過有兩個指針,一個指向列隊頭,一個指向列隊尾。指向列隊頭的指針(Head)是緩沖區可讀的數據,指向列隊尾的指針(Tail)是
    發表于 10-16 11:40

    在fpga中緩沖和切換緩沖區大小應該是多少?

    嗨,我正在以一個頻率連續地以隨機順序接收數據包,并且我想要以相同/不同的頻率按順序緩沖和輸出它們。正常的FIFO不起作用,因為數據包不會是“先進先出”,緩沖區大小應該是多少?有什么線索
    發表于 02-28 09:46

    基于ARM和FPGA的環形緩沖區接口設計方案

    公司的V5系列SX95T型FPGA組成。物理層最高速率為1Mb/s,通過變化來自應用層的數據包大小和的間隔來改變用戶速率,用以測試ARM和FPGA的數據緩沖區和匹配功能。實際測試和運行表明,此方案
    發表于 05-30 05:00

    如何檢測數據包丟失?

    您好,我想做一個回環字體(發送一個IP地址和MAC地址反轉的rx),具有最好的性能(這是對網絡段進行速度測試)。我可以將rx緩沖區切換到tx緩沖區(以避免復制)嗎?你能給我一個源代
    發表于 03-13 08:56

    如何用初始數據填充RAM緩沖區?

    我想用初始數據填充RAM緩沖區,當數據請求信號到來時,數據將準備好并等待。我有一個狀態機,當狀態為1時,數據寫入
    發表于 06-14 20:15

    環形緩沖區簡介

    STM32串口數據接收 --環形緩沖區環形緩沖區簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數據接收與發送,環形緩沖區
    發表于 08-17 06:56

    請問串口的DMA接收緩沖區是不是環形緩沖區

    大家好!請問串口的DMA接收緩沖區是不是環形緩沖區?通過閱讀串口部分的代碼,我了解到這樣幾點:1、串口的DMA接收時循環接收,當緩沖區滿了會重新從頭開始覆蓋掉之前的數據,和環形
    發表于 08-30 14:27

    嗅探器的最佳緩沖區wifi設置是什么?

    我使用 esp32 作為 wifi 802.11 數據包嗅探器,使用混雜模式。該設備專用于此目的,因此我想要一個能夠最大化嗅探器性能的 wifi 配置。嗅探器的最佳緩沖區設置是什么?
    發表于 03-01 06:53

    變長數據包數據結構定義

    用方便的呢? GNU C 的0長度數組(變長數組/柔性數組)就是這樣一個擴展. 對于 0長數組 的這個特點,很容易構造出變成結構體,如緩沖區,數據包等等: 數據結構定義 // 0長度數
    的頭像 發表于 09-27 15:08 ?488次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>