在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

你是否真的了解結(jié)構(gòu)體占用了多少字節(jié)?

信盈達 ? 2024-06-04 08:04 ? 次閱讀

結(jié)構(gòu)體成員所占內(nèi)存空間大小

fd536da6-2205-11ef-bd4a-92fbcf53809c.png

一般情況下,如果想知道結(jié)構(gòu)體成員的內(nèi)存占用情況需要:

1、先用結(jié)構(gòu)體在內(nèi)存中開空間

2、使用sizeof(結(jié)構(gòu)體變量.成員名)或者sizeof(結(jié)構(gòu)體指針->成員名)的形式獲取成員在內(nèi)存中所占空間大小,舉例如下:

#include#include
typedef struct{ int id; char ch;}data;
int main(){ data a; // 結(jié)構(gòu)體變量 data *p = (data *)malloc(sizeof(data));
// 結(jié)構(gòu)體變量用點語法 printf("方式一:成員id大小:%d,ch大小:%d\n", sizeof(a.id),sizeof(a.ch));
// 結(jié)構(gòu)體指針用 -> printf("方式二:成員id大小:%d,ch大小:%d\n", sizeof(p->id),sizeof(p->ch));
return 0;}

此方法需要在內(nèi)存中開辟空間。

fd56d5c2-2205-11ef-bd4a-92fbcf53809c.png

在閱讀源碼的時候偶然發(fā)現(xiàn)了一種非常妙的寫法:可以將結(jié)構(gòu)體指針強制指向地址為0的區(qū)域,然后直接用sizeof訪問成員。

printf("方法三:成員id大小:%d,ch大小:%d\n", sizeof(((data *)0)->id),sizeof(((data *)0)->ch));

地址為0的區(qū)域為保留區(qū),程序運行時并不會真正在內(nèi)存中開空間,這里可以理解為借用了0值。

為了通用,可以將這種方法進行宏定義:

#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)

Struct --- 結(jié)構(gòu)體類型名字

Attribute--- 結(jié)構(gòu)體成員名測試代碼如下,你也快去試一下吧!

#include#include
#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)
typedef struct{ int id; char ch;}data;
typedef struct{ double d; short m;}data2;
int main(){ printf("%d\n",size_of_attribute(data,ch)); printf("%d\n",size_of_attribute(data2,d)); return 0;}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3025

    瀏覽量

    74056
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    641

    瀏覽量

    29216
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    10844
收藏 人收藏

    評論

    相關(guān)推薦

    結(jié)構(gòu)成員的順序會影響結(jié)構(gòu)的大小嗎

    相同的結(jié)構(gòu)成員,如果把順序調(diào)整一下,會不會影響結(jié)構(gòu)的大小? 答案是會的,這主要跟字節(jié)對齊有關(guān)。 比如這樣的
    的頭像 發(fā)表于 11-25 16:24 ?175次閱讀

    深度了解SiC的晶體結(jié)構(gòu)

    SiC是由硅(Si)和碳(C)按1:1的化學(xué)計量比組成的晶體,因其內(nèi)部結(jié)構(gòu)堆積順序的不同,形成不同的SiC多型,本篇章帶你了解SiC的晶體結(jié)構(gòu)及其可能存在的晶體缺陷。
    的頭像 發(fā)表于 11-14 14:57 ?637次閱讀
    深度<b class='flag-5'>了解</b>SiC的晶體<b class='flag-5'>結(jié)構(gòu)</b>

    字節(jié)豆包推出AI智能耳機

    字節(jié)跳動旗下豆包品牌近日推出了其首款A(yù)I智能耳機——Ola Friend。這款耳機采用了開放式設(shè)計,單耳重量僅為6.6克,佩戴舒適輕盈。
    的頭像 發(fā)表于 10-10 16:55 ?529次閱讀

    認(rèn)識貼片電阻嗎,對他了解多少?

    認(rèn)識貼片電阻嗎,對他了解多少?
    的頭像 發(fā)表于 08-27 15:49 ?471次閱讀
    <b class='flag-5'>你</b>認(rèn)識貼片電阻嗎,<b class='flag-5'>你</b>對他<b class='flag-5'>了解</b>多少?

    【GD32 MCU 入門教程】六、GD32 MCU 選項字節(jié)設(shè)置及解除方法

    您在使用GD32過程中是否遇到過芯片反復(fù)復(fù)位,代碼無法更新,代碼一直執(zhí)行在0x1fffxxxx區(qū)域,或代碼執(zhí)行在SRAM區(qū)域的情況?如果有遇到這類現(xiàn)象是否找到原因呢?如果沒找到是否檢查過選項
    的頭像 發(fā)表于 08-26 09:43 ?615次閱讀
    【GD32 MCU 入門教程】六、GD32 MCU 選項<b class='flag-5'>字節(jié)</b>設(shè)置及解除方法

    知道一成型電感多少錢嗎

    知道一成型電感多少錢嗎 gujing 編輯:谷景電子 一成型電感是電子電路中特別重要的一種零件,大家在選擇一成型電感的時候都會比較重視它的價格!一
    的頭像 發(fā)表于 07-06 10:46 ?971次閱讀

    真的了解駐波比嗎?到底什么是電壓駐波比?

    真的了解駐波比嗎?到底什么是電壓駐波比?在很長一段時間內(nèi),小編對駐波比的了解僅限于這樣一個概念:它是一個用于描述波反射大小的物理量,取值范圍[1, ∞],值越小,就表示反射越小,值越
    的頭像 發(fā)表于 05-29 14:27 ?4063次閱讀
    <b class='flag-5'>你</b><b class='flag-5'>真的</b><b class='flag-5'>了解</b>駐波比嗎?到底什么是電壓駐波比?

    用FreeRTOS使用隊列怎么發(fā)送一個結(jié)構(gòu)呢?

    怎么使用隊列,發(fā)送一個12個字節(jié)結(jié)構(gòu)呢? osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec
    發(fā)表于 04-17 07:35

    C語言結(jié)構(gòu)史上最詳細的講解【軟件干貨】

    struct結(jié)構(gòu)數(shù)據(jù)類型 前言 我們知道,在C語言中有一些基本的數(shù)據(jù)類型,如?char?int?float?long?double?string(c99) 等等數(shù)據(jù)類型,他們可以表示一些事物
    的頭像 發(fā)表于 03-28 17:52 ?763次閱讀

    PSOC4的PWM輸出占用的IO引腳是否可以做普通GPIO口嗎?

    PSOC4在設(shè)置開啟PWM模塊應(yīng)用占用某個IO引腳輸出,一段時間后,由于不需要PWM功能,計劃關(guān)掉PWM模塊,讓該占用的IO口做普通GPIO使用,是否可以實現(xiàn)?怎么實現(xiàn)?
    發(fā)表于 02-05 08:25

    MCAL的DMA如何使得變量存儲由編譯器自動分配 ?

    (DMA_START_SEC_CONFIG_DATA_ASIL_B_CORE0_256),但是Dma_kChannel_40_TcsConfigRoot結(jié)構(gòu)實際只占用16個字節(jié),請問
    發(fā)表于 02-02 08:33

    求助,請問一個結(jié)構(gòu)如何全部定義到 __attribute__ 區(qū)域?

    請問一個結(jié)構(gòu)如何全部定義到 __attribute__ 區(qū)域? 例如我這里涉及到一些高速計算的緩存,計劃將緩存數(shù)據(jù)存儲到 __attribute__ 區(qū)域。 三個結(jié)構(gòu) ,每個
    發(fā)表于 01-16 07:29

    經(jīng)典 C 語言編程,結(jié)構(gòu)和聯(lián)合體如何共用?

    結(jié)構(gòu) 結(jié)構(gòu)占用的內(nèi)存大小,首先和編譯器的系統(tǒng)位數(shù)有關(guān)系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,
    的頭像 發(fā)表于 01-11 18:24 ?1377次閱讀
    經(jīng)典 C 語言編程,<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和聯(lián)合體如何共用?

    結(jié)構(gòu)與指針的關(guān)系

    在C語言中,結(jié)構(gòu)(Struct)是一種用戶自定義的數(shù)據(jù)類型,它允許您將不同類型的數(shù)據(jù)項組合在一起,以便形成一個更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)可以
    的頭像 發(fā)表于 01-11 08:00 ?1000次閱讀
    <b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>與指針的關(guān)系

    keil arm工程中結(jié)構(gòu)1字節(jié)對齊如何實現(xiàn)

    在Keil Arm工程中,結(jié)構(gòu)的對齊方式可以通過使用特定的編譯器指令或者關(guān)鍵字來實現(xiàn)。結(jié)構(gòu)的對齊方式會直接影響結(jié)構(gòu)
    的頭像 發(fā)表于 01-05 14:40 ?3812次閱讀
    主站蜘蛛池模板: aa亚洲| 美女扒开尿口给男人看的让| 亚洲乱码卡一卡二卡三| 夜夜夜爽| mm131美女肉体艺术图片| www.亚洲日本| 毛片网站在线| 天堂网www天堂在线网| 狠狠轮| 国产免费久久| 久久婷婷一区二区三区| 手机看片福利视频| 久久婷人人澡人人爽| 嫩草影院入口一二三免费| 天天插天天操天天射| 性8sex亚洲区入口| 农村女人的一级毛片| 深夜久久| 字幕网中文aⅴ资源站| 亚洲乱亚洲乱妇41p国产成人| 免费观看四虎精品国产永久| 天天干天天操天天透| 免费在线观看一区二区| 狼狼色丁香久久女婷婷综合| hs网站在线观看| 狠狠干人人干| 欧美一级在线观看| 免费三级pq| 亚洲成人三级电影| 真实一级一级一片免费视频| 正在播放亚洲一区| 男人天堂网在线观看| 黄色录像视频网站| 四虎影院在线网址| 国产午夜人做人视频羞羞| 天堂资源8中文最新版在线| 久久精品在| 高清一级做a爱免费视| 中文字幕亚洲区| 久精品视频村上里沙| 1024你懂的国产精品|