精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

經常聽說字節對齊,那什么是對齊?

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

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

最后一個是c,因為只占一個字節,所以直接放在最后就好。

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


四、如果結構體內有成員長度大于處理器的位數,那么就以處理器的位數作為對齊單位,比如在32位操作系統中,double占8字節,我們還是按照4字節為對齊單位。

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

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6747

    瀏覽量

    123201
  • 字節
    +關注

    關注

    0

    文章

    40

    瀏覽量

    13718
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28334

原文標題:字節對齊

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM嵌入式系統中內存對齊的重要性

    做嵌入式系統軟件開發,經常在代碼中看到各種各樣的對齊,很多時候我們都是知其然不知其所以然,知道要做好各種對齊,但是不明白為什么要對齊,不對齊
    的頭像 發表于 11-11 17:17 ?635次閱讀
    ARM嵌入式系統中內存<b class='flag-5'>對齊</b>的重要性

    請問cc3200 i2s怎么設置左對齊或者右對齊模式?

    CC3200 手冊 swru367中有提到i2s支持左對齊或者右對齊,但是在sdk提供的api中沒有找到如何設置,請問哪位高人知道,請指點一下,謝謝
    發表于 10-21 07:08

    三相三電平逆變器的中心對齊SVPWM實現

    電子發燒友網站提供《三相三電平逆變器的中心對齊SVPWM實現.pdf》資料免費下載
    發表于 10-12 11:25 ?0次下載
    三相三電平逆變器的中心<b class='flag-5'>對齊</b>SVPWM實現

    OpenAI超級對齊團隊解散

    近日,OpenAI的安全主管、“超級智能對齊團隊”負責人Jan Leike宣布離職。據悉,Jan Leike與OpenAI高層在公司的核心優先事項上存在長期且難以調和的分歧。
    的頭像 發表于 05-20 10:16 ?402次閱讀

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

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

    HarmonyOS開發ArkUI案例:【常用布局容器對齊方式】

    基于ArkTS擴展的聲明式開發范式,實現Flex、Column、Row和Stack四種常用布局容器對齊方式。
    的頭像 發表于 05-08 16:47 ?1525次閱讀
    HarmonyOS開發ArkUI案例:【常用布局容器<b class='flag-5'>對齊</b>方式】

    AN2658中的AD數據對齊錯了怎么解決?

    看到 STM8s003 中文資料, 其 應用筆記 AN2658 中的 AD 數據對齊 描述,將左右對齊搞反了。
    發表于 05-06 07:43

    求助,關于STM32H7的Cache無效化操作32字節對齊問題求解

    core_cm7.h更新到5.1.1版本后,發現該函數對dsize做了32字節對齊,但是op_addr地址32字節對齊卻注釋掉了?,圖片的這句話是不是說SCB-&gt
    發表于 03-29 06:51

    STM32H操作外部存儲器的地址沒有對齊怎么解決?

    如下硬件例外中斷,查看了一下是給外部SDRAM變量賦值時發生的,匯編指令如下0x800'4e5a: 0x600aSTR R2, [R1] R1的值是0x3004'4036,沒有進行4字節對齊,發生這種問題是MPU設置不對嗎,還是對編譯器的設置不對,還是
    發表于 03-28 07:23

    PSoC Creator有沒有內存對齊方式的設置?

    使用PSoC4開發的時候發現ROM不夠了,想做下優化,PSoC Creator有沒有內存對齊方式的設置,比如說把對齊方式從4Byte改為2Byte?
    發表于 02-18 08:03

    請問PWM波輸出方式中的邊沿對齊與中心對齊有什么區別呢?

    請問PWM波輸出方式中的邊沿對齊與中心對齊有什么區別呢?對于PMSM FOC應該使用那種對齊方式呢?為什么呢?
    發表于 02-05 06:06

    TC275 ATOM模塊怎么配置中心對齊的PWM?

    TC275ATOM模塊怎么配置中心對齊的PWM?
    發表于 02-02 07:15

    keil arm工程中結構體1字節對齊如何實現

    的默認對齊方式和規則 結構體在Keil Arm工程中的默認對齊方式是根據編譯器或者編譯器選項來定的。通常情況下,編譯器會按照平臺的特定對齊方式對結構體進行對齊,這樣可以提高內存訪問速度
    的頭像 發表于 01-05 14:40 ?3540次閱讀

    OneLLM:對齊所有模態的框架!

    OneLLM 是第一個在單個模型中集成八種不同模態的MLLM。通過統一的框架和漸進式多模態對齊pipelines,可以很容易地擴展OneLLM以包含更多數據模式。
    的頭像 發表于 01-04 11:27 ?915次閱讀
    OneLLM:<b class='flag-5'>對齊</b>所有模態的框架!

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

    如題。現在我想用兩片AD9516-1 ,我想讓這兩片芯片的比如說LVPECL的通道0輸出都是對齊的。應該怎么做? 我嘗試了將兩片芯片的SYNC引腳連到一個開關上。當然還接了buffer。這兩個芯片
    發表于 12-05 08:15