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

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

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

經(jīng)常聽(tīng)說(shuō)字節(jié)對(duì)齊,那什么是對(duì)齊?

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2023-01-31 15:24 ? 次閱讀
在計(jì)算結(jié)構(gòu)體長(zhǎng)度的時(shí)候,我們經(jīng)常聽(tīng)說(shuō)字節(jié)對(duì)齊。那什么是對(duì)齊?
如果一個(gè)變量在內(nèi)存中的地址正好是它長(zhǎng)度的整數(shù)倍,我們就稱(chēng)它為自然對(duì)齊。
比如在32位的操作系統(tǒng)中,如果一個(gè)整型變量的地址是0x04,那么它就是自然對(duì)齊。
3b05c184-a07b-11ed-bfe3-dac502259ad0.png而且操作系統(tǒng)也確實(shí)是這么做的,隨便定義一個(gè)整型變量,打印它的地址,結(jié)果一定是4的倍數(shù)。
int main()
{
int num;
printf("%p
", &num);
return 0;
}
這樣做的根本原因還是為了提高CPU的訪問(wèn)效率。如果一個(gè)整型變量存放在0x02地址上,那么CPU首先會(huì)讀取兩個(gè)字節(jié)的short,再讀取后面的兩個(gè)字節(jié),最后把兩個(gè)部分合成一個(gè)整數(shù),很顯然這樣的效率會(huì)比較低。
3b15559a-a07b-11ed-bfe3-dac502259ad0.png ?有了這個(gè)基礎(chǔ),我們?cè)賮?lái)計(jì)算結(jié)構(gòu)體的長(zhǎng)度,就會(huì)簡(jiǎn)單的多。
struct Test
{
    char ch;
    int num;
    short id;
charc;
};
比如這個(gè)結(jié)構(gòu),char類(lèi)型占一個(gè)字節(jié),int占四個(gè)字節(jié),但是num不能直接跟在ch的后面,否則num的地址肯定不是4的整數(shù)倍,所以需要在ch的后面空3個(gè)字節(jié)。
3b256cc8-a07b-11ed-bfe3-dac502259ad0.png
接下來(lái)輪到id,在32位系統(tǒng)中short占2個(gè)字節(jié),直接跟在num的后面就行。

3b401352-a07b-11ed-bfe3-dac502259ad0.png

最后一個(gè)是c,因?yàn)橹徽家粋€(gè)字節(jié),所以直接放在最后就好。

3b50104a-a07b-11ed-bfe3-dac502259ad0.png ?那結(jié)構(gòu)體的長(zhǎng)度是不是11個(gè)字節(jié)呢,不是的,結(jié)構(gòu)體的長(zhǎng)度一定是最長(zhǎng)成員的整數(shù)倍,所以在c的后面還空了一個(gè)字節(jié),結(jié)構(gòu)體一共占了12字節(jié)。
記住幾個(gè)原則。
一、結(jié)構(gòu)體變量的首地址是最長(zhǎng)成員長(zhǎng)度的整數(shù)倍。比如我們計(jì)算的這個(gè)結(jié)構(gòu)體,它的首地址一定是4的整數(shù)倍。
二、每個(gè)成員相對(duì)結(jié)構(gòu)體首地址的偏移量,一定是該成員長(zhǎng)度的整數(shù)倍。
三、結(jié)構(gòu)體的總長(zhǎng)度是最長(zhǎng)成員長(zhǎng)度的整數(shù)倍。


四、如果結(jié)構(gòu)體內(nèi)有成員長(zhǎng)度大于處理器的位數(shù),那么就以處理器的位數(shù)作為對(duì)齊單位,比如在32位操作系統(tǒng)中,double占8字節(jié),我們還是按照4字節(jié)為對(duì)齊單位。

3b5fe326-a07b-11ed-bfe3-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(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)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6615

    瀏覽量

    123032
  • 字節(jié)
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    13683
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    609

    瀏覽量

    28289

原文標(biāo)題:字節(jié)對(duì)齊

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)cc3200 i2s怎么設(shè)置左對(duì)齊或者右對(duì)齊模式?

    CC3200 手冊(cè) swru367中有提到i2s支持左對(duì)齊或者右對(duì)齊,但是在sdk提供的api中沒(méi)有找到如何設(shè)置,請(qǐng)問(wèn)哪位高人知道,請(qǐng)指點(diǎn)一下,謝謝
    發(fā)表于 10-21 07:08

    三相三電平逆變器的中心對(duì)齊SVPWM實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《三相三電平逆變器的中心對(duì)齊SVPWM實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-12 11:25 ?0次下載
    三相三電平逆變器的中心<b class='flag-5'>對(duì)齊</b>SVPWM實(shí)現(xiàn)

    OpenAI超級(jí)對(duì)齊團(tuán)隊(duì)解散

    近日,OpenAI的安全主管、“超級(jí)智能對(duì)齊團(tuán)隊(duì)”負(fù)責(zé)人Jan Leike宣布離職。據(jù)悉,Jan Leike與OpenAI高層在公司的核心優(yōu)先事項(xiàng)上存在長(zhǎng)期且難以調(diào)和的分歧。
    的頭像 發(fā)表于 05-20 10:16 ?347次閱讀

    鴻蒙ArkUI開(kāi)發(fā):【彈性布局(主軸&amp;交叉軸對(duì)齊方式)】

    通過(guò)justifyContent參數(shù)設(shè)置在主軸方向的對(duì)齊方式,和Row、Column的主軸對(duì)齊方式行為一樣
    的頭像 發(fā)表于 05-14 15:33 ?584次閱讀
    鴻蒙ArkUI開(kāi)發(fā):【彈性布局(主軸&amp;交叉軸<b class='flag-5'>對(duì)齊</b>方式)】

    HarmonyOS開(kāi)發(fā)ArkUI案例:【常用布局容器對(duì)齊方式】

    基于ArkTS擴(kuò)展的聲明式開(kāi)發(fā)范式,實(shí)現(xiàn)Flex、Column、Row和Stack四種常用布局容器對(duì)齊方式。
    的頭像 發(fā)表于 05-08 16:47 ?1417次閱讀
    HarmonyOS開(kāi)發(fā)ArkUI案例:【常用布局容器<b class='flag-5'>對(duì)齊</b>方式】

    AN2658中的AD數(shù)據(jù)對(duì)齊錯(cuò)了怎么解決?

    看到 STM8s003 中文資料, 其 應(yīng)用筆記 AN2658 中的 AD 數(shù)據(jù)對(duì)齊 描述,將左右對(duì)齊搞反了。
    發(fā)表于 05-06 07:43

    求助,關(guān)于STM32H7的Cache無(wú)效化操作32字節(jié)對(duì)齊問(wèn)題求解

    core_cm7.h更新到5.1.1版本后,發(fā)現(xiàn)該函數(shù)對(duì)dsize做了32字節(jié)對(duì)齊,但是op_addr地址32字節(jié)對(duì)齊卻注釋掉了?,圖片的這句話(huà)是不是說(shuō)SCB-&gt
    發(fā)表于 03-29 06:51

    請(qǐng)問(wèn)PWM波輸出方式中的邊沿對(duì)齊與中心對(duì)齊有什么區(qū)別呢?

    請(qǐng)問(wèn)PWM波輸出方式中的邊沿對(duì)齊與中心對(duì)齊有什么區(qū)別呢?對(duì)于PMSM FOC應(yīng)該使用那種對(duì)齊方式呢?為什么呢?
    發(fā)表于 02-05 06:06

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

    的默認(rèn)對(duì)齊方式和規(guī)則 結(jié)構(gòu)體在Keil Arm工程中的默認(rèn)對(duì)齊方式是根據(jù)編譯器或者編譯器選項(xiàng)來(lái)定的。通常情況下,編譯器會(huì)按照平臺(tái)的特定對(duì)齊方式對(duì)結(jié)構(gòu)體進(jìn)行對(duì)齊,這樣可以提高內(nèi)存訪問(wèn)速度
    的頭像 發(fā)表于 01-05 14:40 ?3120次閱讀

    OneLLM:對(duì)齊所有模態(tài)的框架!

    OneLLM 是第一個(gè)在單個(gè)模型中集成八種不同模態(tài)的MLLM。通過(guò)統(tǒng)一的框架和漸進(jìn)式多模態(tài)對(duì)齊pipelines,可以很容易地?cái)U(kuò)展OneLLM以包含更多數(shù)據(jù)模式。
    的頭像 發(fā)表于 01-04 11:27 ?824次閱讀
    OneLLM:<b class='flag-5'>對(duì)齊</b>所有模態(tài)的框架!

    AD9516-1能否做到不同芯片間的輸出對(duì)齊呢?

    如題?,F(xiàn)在我想用兩片AD9516-1 ,我想讓這兩片芯片的比如說(shuō)LVPECL的通道0輸出都是對(duì)齊的。應(yīng)該怎么做? 我嘗試了將兩片芯片的SYNC引腳連到一個(gè)開(kāi)關(guān)上。當(dāng)然還接了buffer。這兩個(gè)芯片
    發(fā)表于 12-05 08:15

    LLMs實(shí)際上在假對(duì)齊

    LLM的訓(xùn)練分為預(yù)訓(xùn)練和安全訓(xùn)練。預(yù)訓(xùn)練是指在大規(guī)模語(yǔ)料庫(kù)上進(jìn)行訓(xùn)練,因此LLM獲得了各種強(qiáng)大的能力,如文本生成、推理和主題知識(shí)等。安全訓(xùn)練使用有監(jiān)督的微調(diào)、RLHF、RLAIF和其他技術(shù)來(lái)對(duì)齊模型偏好與人類(lèi)價(jià)值偏好,從而為L(zhǎng)LM建立安全護(hù)欄。
    的頭像 發(fā)表于 11-20 17:41 ?909次閱讀
    LLMs實(shí)際上在假<b class='flag-5'>對(duì)齊</b>!

    嵌套的結(jié)構(gòu)體 字節(jié)是如何對(duì)齊

    嵌套的結(jié)構(gòu)體,字節(jié)又是如何對(duì)齊的呢 先來(lái)看下面的代碼 typedef struct stu1 { char ary [ 5 ] ; int a; }stu1; typedef struct stu2
    的頭像 發(fā)表于 11-20 16:01 ?468次閱讀
    嵌套的結(jié)構(gòu)體 <b class='flag-5'>字節(jié)</b>是如何<b class='flag-5'>對(duì)齊</b>的

    什么是結(jié)構(gòu)體的字節(jié)對(duì)齊現(xiàn)象

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

    西門(mén)子伺服電機(jī)更換編碼器,要調(diào)整對(duì)齊編碼器,如何對(duì)齊呢?

    西門(mén)子伺服電機(jī)更換編碼器,要調(diào)整對(duì)齊編碼器,如何對(duì)齊呢?
    發(fā)表于 11-15 07:16