= sizeof(int) + sizeof(char *) 數(shù)據(jù)包創(chuàng)建 但是在開辟內(nèi)存時(shí), 需要調(diào)用兩次malloc ,第一次給結(jié)構(gòu)體分配內(nèi)存,第二次給成員data分配內(nèi)存: if ((pbuffer = (struct point_buffer *) malloc ( sizeof (stru" />

chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用指針數(shù)據(jù)包定義數(shù)據(jù)緩沖區(qū)

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 15:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

指針數(shù)據(jù)包

相信大多數(shù)人會將定長數(shù)組換為 指針 , 每次使用時(shí)動(dòng)態(tài)的開辟 CURR_LENGTH 大小的空間, 因?yàn)檫@樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費(fèi), 只浪費(fèi)了一個(gè)指針域的空間.

  • 數(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)存時(shí), 需要調(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)點(diǎn) :不會造成空間的大量浪費(fèi),只多使用了一個(gè)指針大小的空間
  • 缺點(diǎn) :開辟空間時(shí)需要額外開辟數(shù)據(jù)域的空間,釋放時(shí)也需要先釋放數(shù)據(jù)域的空間。假如用戶不知道這個(gè)數(shù)據(jù)包創(chuàng)建的具體細(xì)節(jié),有可能會只釋放結(jié)構(gòu)體指針,不釋放數(shù)據(jù)域指針。因此容易造成內(nèi)存泄露。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    143865
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71573
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    269

    瀏覽量

    25278
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用UART FIFO緩沖區(qū)時(shí),緩沖區(qū)中的數(shù)據(jù)有時(shí)會損壞的原因?

    我在使用 UART FIFO 緩沖區(qū)時(shí)遇到了以下問題。 問題描述: 當(dāng)通過兩個(gè) UART 通道使用完整的 UART FIFO 緩沖區(qū)并通過兩個(gè)通道進(jìn)行通信時(shí),緩沖區(qū)中的數(shù)據(jù)有時(shí)會損壞,
    發(fā)表于 03-06 06:59

    ESP8266有雙緩沖區(qū)嗎?

    我想實(shí)時(shí)傳輸一些信號的測量數(shù)據(jù)。信號的采樣周期為 1 ms。我想每 500 毫秒發(fā)送 2048 字節(jié)(一個(gè)數(shù)據(jù)包)。ESP8266有雙緩沖區(qū)(2x 2048字節(jié))嗎?其想法是計(jì)數(shù)填充一個(gè)緩沖區(qū)
    發(fā)表于 07-16 07:29

    基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計(jì)方案

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

    如何檢測數(shù)據(jù)包丟失?

    您好,我想做一個(gè)回環(huán)字體(發(fā)送一個(gè)IP地址和MAC地址反轉(zhuǎn)的rx),具有最好的性能(這是對網(wǎng)絡(luò)段進(jìn)行速度測試)。我可以將rx緩沖區(qū)切換到tx緩沖區(qū)(以避免復(fù)制)嗎?你能給我一個(gè)源代
    發(fā)表于 03-13 08:56

    一文讀懂路由器緩沖區(qū)大小的重要性

    對于網(wǎng)絡(luò)而言,數(shù)據(jù)包在網(wǎng)線上的時(shí)候,絕對安全,絕對是全速前進(jìn),最危險(xiǎn)的就是到達(dá)轉(zhuǎn)發(fā)設(shè)備內(nèi)部,設(shè)備處理數(shù)據(jù)包帶來的固有延遲導(dǎo)致數(shù)據(jù)包必須有機(jī)會被緩沖,處理加速比一定要和
    發(fā)表于 10-15 09:47 ?4937次閱讀

    CPU與GPU維護(hù)數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作

    CPU 和 GPU 將各自維護(hù)一些數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作。這些 數(shù)據(jù)結(jié)構(gòu)有緩沖區(qū)的基地址,緩沖區(qū)大小,寫
    的頭像 發(fā)表于 03-30 15:01 ?6942次閱讀
    CPU與GPU維護(hù)<b class='flag-5'>數(shù)據(jù)</b>結(jié)構(gòu)來保證環(huán)形<b class='flag-5'>緩沖區(qū)</b>的正確工作

    環(huán)形緩沖區(qū)的實(shí)現(xiàn)原理

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對
    的頭像 發(fā)表于 03-22 10:03 ?8115次閱讀
    環(huán)形<b class='flag-5'>緩沖區(qū)</b>的實(shí)現(xiàn)原理

    緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)

    緩沖區(qū)顧名思義是緩沖數(shù)據(jù)用的。實(shí)現(xiàn)緩沖區(qū)最簡單的辦法時(shí),定義多個(gè)數(shù)組,接收一
    的頭像 發(fā)表于 07-22 15:33 ?1.2w次閱讀

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)環(huán)形緩沖區(qū)簡介??在單片機(jī)中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數(shù)據(jù)接收與發(fā)送,環(huán)形緩沖區(qū)
    發(fā)表于 12-28 19:24 ?31次下載
    STM32串口<b class='flag-5'>數(shù)據(jù)</b>接收 --環(huán)形<b class='flag-5'>緩沖區(qū)</b>

    數(shù)據(jù)包的發(fā)送流程

    一個(gè)數(shù)據(jù)包,從聊天框里發(fā)出,消息會從聊天軟件所在的用戶空間拷貝到內(nèi)核空間的發(fā)送緩沖區(qū)(send buffer),數(shù)據(jù)包就這樣順著傳輸層、網(wǎng)絡(luò)層,進(jìn)入到數(shù)據(jù)鏈路層,在這里
    的頭像 發(fā)表于 08-19 14:38 ?3195次閱讀

    零長數(shù)組如何使用定長定義數(shù)據(jù)緩沖區(qū)

    零長數(shù)組 請先思考以下問題: C語言中,數(shù)組長度是否可以為0? 如果要接收一個(gè)不定長數(shù)據(jù)包,你會如何定義數(shù)據(jù)緩沖區(qū)? 第一個(gè)問題 : 在標(biāo)準(zhǔn)C語言中,沒有長度為0的數(shù)組,但在 GNU
    的頭像 發(fā)表于 09-27 14:58 ?1131次閱讀

    變長數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)定義

    用方便的呢? GNU C 的0長度數(shù)組(變長數(shù)組/柔性數(shù)組)就是這樣一個(gè)擴(kuò)展. 對于 0長數(shù)組 的這個(gè)特點(diǎn),很容易構(gòu)造出變成結(jié)構(gòu)體,如緩沖區(qū),數(shù)據(jù)包等等: 數(shù)據(jù)結(jié)構(gòu)定義 // 0長度數(shù)
    的頭像 發(fā)表于 09-27 15:08 ?1086次閱讀

    C++環(huán)形緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn)

    一、環(huán)形緩沖區(qū)基礎(chǔ)理論解析(Basic Theory of Circular Buffer) 1.1 環(huán)形緩沖區(qū)定義與作用(Definition and Function of Circular
    的頭像 發(fā)表于 11-09 11:21 ?3636次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計(jì)與實(shí)現(xiàn)

    交換機(jī)與路由器緩沖區(qū):尋找完美大小

    學(xué)術(shù)界和工業(yè)界一直備受爭議。本文探討了高端路由器中數(shù)據(jù)包緩沖的歷史和演變,以期概述當(dāng)前的實(shí)踐和未來的趨勢。 網(wǎng)絡(luò)芯片中的緩沖區(qū) 在典型的路由器/交換機(jī) ASIC 中,會發(fā)現(xiàn)三種類型的數(shù)據(jù)包
    的頭像 發(fā)表于 04-11 16:56 ?2450次閱讀
    交換機(jī)與路由器<b class='flag-5'>緩沖區(qū)</b>:尋找完美大小

    RTOS的流緩沖區(qū)機(jī)制解析

    SAFERTOS中的流緩沖區(qū)(Stream buffer)機(jī)制,可以實(shí)現(xiàn)任務(wù)到任務(wù)或中斷到任務(wù)之間的通信。字節(jié)流是由發(fā)送方寫入緩沖區(qū),接收方讀取緩沖區(qū)數(shù)據(jù)。流
    的頭像 發(fā)表于 02-14 11:33 ?754次閱讀
    RTOS的流<b class='flag-5'>緩沖區(qū)</b>機(jī)制解析