一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

變長(zhǎng)數(shù)據(jù)包

定長(zhǎng)數(shù)組使用方便, 但是卻浪費(fèi)空間, 指針形式只多使用了一個(gè)指針的空間, 不會(huì)造成大量空間分浪費(fèi), 但是使用起來(lái)需要多次分配, 多次釋放, 那么有沒(méi)有一種實(shí)現(xiàn)方式能夠既不浪費(fèi)空間, 又使用方便的呢?

GNU C 的0長(zhǎng)度數(shù)組(變長(zhǎng)數(shù)組/柔性數(shù)組)就是這樣一個(gè)擴(kuò)展. 對(duì)于0長(zhǎng)數(shù)組的這個(gè)特點(diǎn),很容易構(gòu)造出變成結(jié)構(gòu)體,如緩沖區(qū),數(shù)據(jù)包等等:

  • 數(shù)據(jù)結(jié)構(gòu)定義
//  0長(zhǎng)度數(shù)組
struct zero_buffer
{
    int     len;
    char    data[0];
};
  • 數(shù)據(jù)結(jié)構(gòu)大小

這樣的變長(zhǎng)數(shù)組常用于網(wǎng)絡(luò)通信中構(gòu)造不定長(zhǎng)數(shù)據(jù)包, 不會(huì)浪費(fèi)空間浪費(fèi)網(wǎng)絡(luò)流量, 因?yàn)?code>char data[0]; 只是個(gè)數(shù)組名, 是不占用存儲(chǔ)空間的,

sizeof(struct zero_buffer) = sizeof(int)

  • 數(shù)據(jù)包創(chuàng)建

我們使用的時(shí)候, 只需要開(kāi)辟一次空間即可:

///  開(kāi)辟
    if ((zbuffer = (struct zero_buffer *)malloc(sizeof(struct zero_buffer) + sizeof(char) * CURR_LENGTH)) != NULL)
    {
        zbuffer- >len = CURR_LENGTH;
        memcpy(zbuffer- >data, "Hello World", CURR_LENGTH);


        printf("%d, %sn", zbuffer- >len, zbuffer- >data);
    }
  • 釋放

釋放也是一樣的, 一次釋放即可:

///  銷(xiāo)毀
    free(zbuffer);
    zbuffer = NULL;
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    不同數(shù)據(jù)結(jié)構(gòu)定義代碼

    數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
    的頭像 發(fā)表于 11-29 14:13 ?862次閱讀

    什么是數(shù)據(jù)結(jié)構(gòu)(Data Structrue)

    的一個(gè)一個(gè)元素數(shù)據(jù)對(duì)象:具有相同特性的數(shù)據(jù)元素的集合結(jié)構(gòu)數(shù)據(jù)元素之間具有的關(guān)系(聯(lián)系) 二.  數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 02-09 17:17

    數(shù)據(jù)結(jié)構(gòu)

    1.數(shù)據(jù)結(jié)構(gòu)的概念 所謂數(shù)據(jù)結(jié)構(gòu)是指由某一數(shù)據(jù)對(duì)象及該對(duì)象中所有數(shù)據(jù)成員之間的關(guān)系組成的集合。成員之間的關(guān)系有很多種,最常見(jiàn)的是前后件關(guān)系。 2.
    發(fā)表于 03-04 14:13

    數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作

    嵌入式學(xué)習(xí)基礎(chǔ)-數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作鏈表節(jié)點(diǎn)采用結(jié)構(gòu)體的方式進(jìn)行定義,下面是最基礎(chǔ)的定義只有一個(gè)數(shù)據(jù)data,*pNext用于指向下一個(gè)節(jié)
    發(fā)表于 12-22 08:05

    OBS邊緣節(jié)點(diǎn)中變長(zhǎng)數(shù)據(jù)包突發(fā)匯聚實(shí)現(xiàn)

    基于光突發(fā)交換邊緣節(jié)點(diǎn)在組裝數(shù)據(jù)包前要采用交換陣對(duì)其進(jìn)行突發(fā)匯聚,描述了交換陣常用的串行輸入輪循算法,根據(jù)邊緣節(jié)點(diǎn)中數(shù)據(jù)包變長(zhǎng)突發(fā)匯聚的特點(diǎn)提出了變長(zhǎng)串行輸
    發(fā)表于 04-19 19:16 ?18次下載

    網(wǎng)絡(luò)數(shù)據(jù)包捕獲機(jī)制研究

    網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù),是實(shí)現(xiàn)入侵檢測(cè)、網(wǎng)絡(luò)安全審計(jì)的關(guān)鍵技術(shù)。本文改進(jìn)了國(guó)外傳統(tǒng)的數(shù)據(jù)包捕獲函數(shù)庫(kù)Libpcap 捕獲數(shù)據(jù)包的方案。原方案在網(wǎng)卡捕獲到數(shù)據(jù)包后,
    發(fā)表于 09-01 10:09 ?9次下載

    基于Jpcap的數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)

    本文研究了以太網(wǎng)數(shù)據(jù)包的捕獲機(jī)制,實(shí)現(xiàn)了基于JPcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲工具,其基本原理是通過(guò)調(diào)用Jpcap庫(kù)捕獲本地網(wǎng)絡(luò)上的所有數(shù)據(jù)包,然后對(duì)數(shù)據(jù)包進(jìn)行協(xié)議解碼,從而可以實(shí)
    發(fā)表于 01-15 13:47 ?38次下載

    數(shù)據(jù)包過(guò)濾原理

    數(shù)據(jù)包過(guò)濾技術(shù)數(shù)據(jù)包過(guò)濾原理              數(shù)據(jù)包過(guò)濾技術(shù)是防火墻最常用的技術(shù)。對(duì)于一
    發(fā)表于 06-16 23:44 ?4793次閱讀
    <b class='flag-5'>數(shù)據(jù)包</b>過(guò)濾原理

    什么是數(shù)據(jù)包?

    什么是數(shù)據(jù)包? 您在互聯(lián)網(wǎng)上做的一切都涉及到數(shù)據(jù)包。例如,您接收的每個(gè)網(wǎng)頁(yè)都以一系列數(shù)據(jù)包的形式傳入,您發(fā)送的每封電子郵件都以一系列數(shù)據(jù)包的形式傳出。以
    發(fā)表于 08-03 09:13 ?2195次閱讀

    數(shù)據(jù)結(jié)構(gòu)是什么_數(shù)據(jù)結(jié)構(gòu)有什么用

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高
    發(fā)表于 11-17 14:45 ?1.6w次閱讀
    <b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>是什么_<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>有什么用

    什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應(yīng)用實(shí)例分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應(yīng)用實(shí)例分析包括了:數(shù)據(jù)結(jié)構(gòu)在串口通信當(dāng)中的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)在按鍵
    發(fā)表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>?為什么要學(xué)習(xí)<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>?<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>的應(yīng)用實(shí)例分析

    網(wǎng)絡(luò)數(shù)據(jù)包分析軟件wireshark的基本使用

    Wireshark(前稱(chēng)Ethereal)是一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包分析軟件。網(wǎng)絡(luò)數(shù)據(jù)包分析軟件的功能是截取網(wǎng)絡(luò)數(shù)據(jù)包,并盡可能顯示出最為詳細(xì)的網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)
    的頭像 發(fā)表于 09-29 14:48 ?3718次閱讀

    NetApp的數(shù)據(jù)結(jié)構(gòu)是如何演變的

    統(tǒng)一數(shù)據(jù)跨分布式資源進(jìn)行管理,以實(shí)現(xiàn)數(shù)據(jù)移動(dòng)的一致性和控制,安全、可見(jiàn)性、保護(hù)和訪問(wèn)。 本文定義數(shù)據(jù)結(jié)構(gòu)及其體系結(jié)構(gòu),討論了
    發(fā)表于 08-25 17:15 ?0次下載
    NetApp的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>是如何演變的

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

    , 只浪費(fèi)了一個(gè)指針域的空間. 數(shù)據(jù)包定義 struct point_buffer{ int len; char * data ;}; 數(shù)據(jù)結(jié)構(gòu)大小 考慮對(duì)齊, 那么數(shù)據(jù)結(jié)構(gòu)的大小 >
    的頭像 發(fā)表于 09-27 15:01 ?706次閱讀

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

    。以下是I2C總線數(shù)據(jù)包結(jié)構(gòu)的詳解: 一、I2C總線數(shù)據(jù)包的基本組成 I2C總線上的數(shù)據(jù)傳輸以數(shù)據(jù)包為單位進(jìn)行,每個(gè)
    的頭像 發(fā)表于 01-17 15:46 ?817次閱讀