色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

嵌套的結構體 字節(jié)是如何對齊的

麥辣雞腿堡 ? 來源:軒哥談芯 ? 作者:義軒 ? 2023-11-20 16:01 ? 次閱讀

嵌套的結構體,字節(jié)又是如何對齊的呢

先來看下面的代碼

typedef structstu1{    char   ary[5];    int    a;}stu1;
typedef structstu2{ double a; char b;}stu2;
typedef structstu3{ stu1 s; char str;}stu3;
typedef structstu4{ stu2 s; char str;}stu4;
LOG_INFO("rnrn====== Struct Test ======rnrn");LOG_INFO("sizeof(stu1) :t%dn",sizeof(stu1)); LOG_INFO("sizeof(stu2) :t%dn",sizeof(stu2)); LOG_INFO("sizeof(stu3) :t%dn",sizeof(stu3));LOG_INFO("sizeof(stu4) :t%dn",sizeof(stu4));

圖片

在上面的運行結果中,stu1和stu2所占內(nèi)存的分別為12字節(jié)和16字節(jié),對這兩者的分析與前面相同。

我們重點看一下這里的stu3和stu4。

在默認情況下,結構體采用該結構體中占用內(nèi)存最大的類型所占的字節(jié)數(shù)作為字節(jié)對齊方式,但是在stu3中定義的stu1結構體類型的變量s占用16字節(jié),而stu3并不是按照16字節(jié)進行對齊的,而是采用4字節(jié)對齊,這是因為stu1和stu3中占用內(nèi)存最大的是int型變量,占用4字節(jié)。因此在分析結構體字節(jié)對齊方式時需要將結構體分解為“原子類型”,如int、double、char、float、short等,而不是自定義的結構體類型。

找出分解出來的“原子類型”中占用內(nèi)存最大的類型,將其占用的內(nèi)存值作為結構體的默認字節(jié)對齊值。

在stu4中定義了stu2類型的結構體變量s,按照上面的方法先對stu2進行分解。分解出來的類型有double、char,stu4中還有char類型,其中占用內(nèi)存最大的是double類型,占用內(nèi)存大小為8字節(jié),由此可知,stu4采用8字節(jié)對齊。

由于stu4中的stu2結構體類型變量s所占用的內(nèi)存大小為16,而接下來定義了一個char類型的str變量,其偏移地址為16,占用一個字節(jié),此時stu4占用的內(nèi)存大小為17,不是字節(jié)對齊數(shù)8的整數(shù)倍,所以在stu4占用的內(nèi)存的最后添加7字節(jié)的空間,使其占有內(nèi)存大小為24。

需要注意,編譯器添加的內(nèi)存并沒有使用,沒有存放任何有意義的內(nèi)容。

在結構體的嵌套中,不管遇到多少層的嵌套,都可以按照這種分解方法,對結構體進行逐層分解,再根據(jù)分解出來的“原子類型”分析結構體的字節(jié)對齊方式.

看下面的例子,會更清楚一些

typedef structstu2{    char   a;    short  c;    int  d;    int  b;
}stu2;
typedef structstu4{ stu2 s; char str; double h;}stu4;
LOG_INFO("offset_of(stu4,s):t%dn",offset_of(stu4,s));LOG_INFO("offset_of(stu4,str):t%dn",offset_of(stu4,str));LOG_INFO("offset_of(stu4,h):t%dn",offset_of(stu4,h));

圖片

在 stu2 中,a 的偏移地址為 0,c 的偏移地址為 2,d 的偏移地址為 4,b 的偏移地址為 8。這里的變量 a,c,d 組成第一個對齊單元,變量 b 會和 stu4 中的 str 組合成一個對齊單元。

套在 stu4 中以后,str 的起始地址就為 12,這里,stu2 的 b 和 stu4 的 str 共同組成了第二個 8 字節(jié)的對齊單元。

最后一個對齊單元是 double 類型的 h 變量。

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

    關注

    0

    文章

    41

    瀏覽量

    13888
  • 代碼
    +關注

    關注

    30

    文章

    4857

    瀏覽量

    69526
  • 編譯器
    +關注

    關注

    1

    文章

    1645

    瀏覽量

    49463
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10911
收藏 人收藏

    評論

    相關推薦

    C語言-結構對齊詳解

    ", sizeof (struct mystruct1));// sizeof (struct mystruct1) = 8} 分析:整個結構變量4字節(jié)對齊是由編譯器保證
    發(fā)表于 07-12 16:41

    RM48HDK平臺CCS結構字節(jié)對齊總是咨詢

    硬件平臺:RM48HDK? 軟件平臺:5.4.0.00091? 編譯器:TI V5.0.6 我在程序中想對一個結構增加單字節(jié)對齊屬性,增加方式如下: 1、參照《ARM Optimiz
    發(fā)表于 05-25 10:38

    CCS3.3 結構成員對齊

    : expected a type specifier error: expected a ";" 這個錯誤。是CCS3.3編譯器本身不支持__packed這種結構成員的對齊方式
    發(fā)表于 06-21 10:16

    請問在ccs4.2 中怎么設置結構字節(jié)對齊

    請問在ccs4.2 中怎么設置結構字節(jié)對齊,用于網(wǎng)絡數(shù)據(jù)發(fā)送的。是:]__attribute__((packed))還是:#pragma pack(1)編譯后,兩種都不行,是什么原
    發(fā)表于 08-02 07:47

    請問z-stack結構默認對齊方式是一字節(jié)嗎?

    z-stack的結構默認對齊方式是一字節(jié)嗎?在z-stack中可以將一般指針強制轉(zhuǎn)換為結構
    發(fā)表于 08-18 07:38

    請問cc2640r2 ccs7.4結構字節(jié)能實現(xiàn)對齊嗎?

    請問結構字節(jié)下面能實現(xiàn)字節(jié)對齊么#pragma pack(1)typedef struct [ uint16_t nt ; uint8_t
    發(fā)表于 10-31 10:10

    STM32終極字節(jié)對齊的相關資料推薦

    字節(jié)對齊。uint64_t定義變量地址要8字節(jié)對齊。指針變量是4字節(jié)對齊。二、
    發(fā)表于 12-06 06:03

    解析C語言結構字節(jié)如何對齊

    01 默認字節(jié)對齊 C語言結構字節(jié)對齊是老生常談的問題了,也是高頻面試題,現(xiàn)在我們來深入研究這
    的頭像 發(fā)表于 06-12 17:42 ?3198次閱讀

    C語言中Linux字節(jié)對齊的問題

    ,于是經(jīng)過排查,是因為傳遞消息的結構沒有考慮字節(jié)對齊的問題。 隨手整理一下C語言中字節(jié)對齊的問
    的頭像 發(fā)表于 08-16 11:25 ?2582次閱讀
    C語言中Linux<b class='flag-5'>字節(jié)</b><b class='flag-5'>對齊</b>的問題

    STM32 終極字節(jié)對齊解析

    字節(jié)對齊。uint64_t定義變量地址要8字節(jié)對齊。指針變量是4字節(jié)對齊。二、
    發(fā)表于 11-23 18:06 ?11次下載
    STM32 終極<b class='flag-5'>字節(jié)</b><b class='flag-5'>對齊</b>解析

    結構對齊理解上有點偏差

    總結一下: 結構對齊不再是簡單的字節(jié)個數(shù)的拼湊,而是要與內(nèi)存地址進行掛鉤~一般我們也可以理解為內(nèi)存地址分配是多少字節(jié)的倍數(shù),就是多少直接
    的頭像 發(fā)表于 08-10 18:08 ?1283次閱讀
    對<b class='flag-5'>結構</b><b class='flag-5'>體</b>的<b class='flag-5'>對齊</b>理解上有點偏差

    結構對齊為什么那么重要?

    以前我也沒覺得懂得這個結構對齊或者內(nèi)存對齊有多重要,直到已經(jīng)從事了嵌入式開發(fā)經(jīng)驗不斷積累,才慢慢體會到,這是一種很基礎的知識,就因為這個東西不常用,而出現(xiàn)相關的問題是非常致命的,排查
    的頭像 發(fā)表于 04-03 10:13 ?1479次閱讀

    為什么要結構對齊?為什么結構對齊那么重要?

    C語言結構對齊問題,是面試必備問題。我參與招聘技術面試的時候,也喜歡問這個技術點。
    的頭像 發(fā)表于 05-26 14:10 ?1476次閱讀
    為什么要<b class='flag-5'>結構</b><b class='flag-5'>體</b><b class='flag-5'>對齊</b>?為什么<b class='flag-5'>結構</b><b class='flag-5'>體</b><b class='flag-5'>對齊</b>那么重要?

    什么是結構字節(jié)對齊現(xiàn)象

    什么是結構字節(jié)對齊現(xiàn)象 程序員,咱都用代碼說話,先上 code: (說明:以下代碼均在 ARM 平臺上,使用 Keil 進行編譯測試) # define offset_of (TY
    的頭像 發(fā)表于 11-20 15:55 ?725次閱讀
    什么是<b class='flag-5'>結構</b><b class='flag-5'>體</b>的<b class='flag-5'>字節(jié)</b><b class='flag-5'>對齊</b>現(xiàn)象

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

    的默認對齊方式和規(guī)則 結構在Keil Arm工程中的默認對齊方式是根據(jù)編譯器或者編譯器選項來定的。通常情況下,編譯器會按照平臺的特定對齊
    的頭像 發(fā)表于 01-05 14:40 ?4273次閱讀
    主站蜘蛛池模板: tube日本护士 | 1区2区3区4区产品不卡码网站 | 蜜臀AV精品一区二区三区 | 在线视频 国产精品 中文字幕 | 欧美国产精品主播一区 | 99精品视频在线免费观看 | 精品久久久久中文字幕日本 | 久久偷拍国2017的 | 色欲国产麻豆一精品一AV一免费 | 欧美一区二区视频高清专区 | 天天操人人射 | 亚洲综合AV色婷婷五月蜜臀 | 国产成人久久婷婷精品流白浆 | 国产v综合v亚洲欧美大片 | 秋霞午夜理论理论福利无码 | 久久中文字幕亚洲 | 无遮挡午夜男女XX00动态 | 十二月综合缴缴情 | 久久精品久久精品 | 调教玩弄奶头乳夹开乳震动器 | 边摸边吃奶边做激情叫床视 | 亚洲一区成人 | 最近中文字幕在线中文高清版 | 無码一区中文字幕少妇熟女网站 | 久久亚洲成a人片 | 两个人的视频hd全免费 | 亚洲精品青青草原avav久久qv | 日日碰狠狠躁久久躁77777 | 无遮掩H黄纯肉动漫在线观看星 | 蜜芽资源高清在线观看 | 久久性综合亚洲精品电影网 | 日韩欧美一区二区中文字幕 | 亚洲AV精品无码国产一区 | 国产在线精品一区二区在线看 | 八妻子秋霞理在线播放 | 免费精品国偷自产在线在线 | 亚洲精品免费在线 | 7m凹凸国产刺激在线视频 | 亚洲精品久久久久无码AV片软件 | 色婷婷粉嫩AV精品综合在线 | 床上色APP下载免费版 |