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

一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲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)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

相信大多數(shù)人會(huì)將定長(zhǎng)數(shù)組換為 指針 , 每次使用時(shí)動(dòng)態(tài)的開(kā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)大小

考慮對(duì)齊, 那么數(shù)據(jù)結(jié)構(gòu)的大小 >= sizeof(int) + sizeof(char *)

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

但是在開(kāi)辟內(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) :不會(huì)造成空間的大量浪費(fèi),只多使用了一個(gè)指針大小的空間
  • 缺點(diǎn) :開(kāi)辟空間時(shí)需要額外開(kāi)辟數(shù)據(jù)域的空間,釋放時(shí)也需要先釋放數(shù)據(jù)域的空間。假如用戶不知道這個(gè)數(shù)據(jù)包創(chuàng)建的具體細(xì)節(jié),有可能會(huì)只釋放結(jié)構(gòu)體指針,不釋放數(shù)據(jù)域指針。因此容易造成內(nèi)存泄露。
聲明:本文內(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)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

    關(guān)注

    1

    文章

    484

    瀏覽量

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

    關(guān)注

    0

    文章

    269

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

    我想實(shí)時(shí)傳輸一些信號(hào)的測(cè)量數(shù)據(jù)。信號(hào)的采樣周期為 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,通過(guò)變化來(lái)自應(yīng)用層的數(shù)據(jù)包大小和的間隔來(lái)改變用戶速率,用以測(cè)試ARM和FPGA的數(shù)據(jù)緩沖區(qū)和匹配功能。實(shí)際測(cè)試和運(yùn)行表明,此方案
    發(fā)表于 05-30 05:00

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

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

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

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

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

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

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

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來(lái)存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對(duì)
    的頭像 發(fā)表于 03-22 10:03 ?7914次閱讀
    環(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ū)最簡(jiǎn)單的辦法時(shí),定義多個(gè)數(shù)組,接收一
    的頭像 發(fā)表于 07-22 15:33 ?1.1w次閱讀

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

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)環(huán)形緩沖區(qū)簡(jiǎn)介??在單片機(jī)中串口通信是我們使用最頻繁的,使用串口通信就會(huì)用到串口的數(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ā)出,消息會(huì)從聊天軟件所在的用戶空間拷貝到內(nèi)核空間的發(fā)送緩沖區(qū)(send buffer),數(shù)據(jù)包就這樣順著傳輸層、網(wǎng)絡(luò)層,進(jìn)入到數(shù)據(jù)鏈路層,在這里
    的頭像 發(fā)表于 08-19 14:38 ?3014次閱讀

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

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

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

    用方便的呢? 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ù)
    的頭像 發(fā)表于 09-27 15:08 ?985次閱讀

    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 ?3249次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計(jì)與實(shí)現(xiàn)

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

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

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

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