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

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

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

3天內不再提示

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

科技綠洲 ? 來源:網絡整理 ? 作者:網絡整理 ? 2024-01-05 14:40 ? 次閱讀

Keil Arm工程中,結構體的對齊方式可以通過使用特定的編譯器指令或者關鍵字來實現。結構體的對齊方式會直接影響結構體變量在內存中的布局和對齊邊界,從而對程序的性能和存儲空間占用產生影響。

  1. 結構體的默認對齊方式和規則
    結構體在Keil Arm工程中的默認對齊方式是根據編譯器或者編譯器選項來定的。通常情況下,編譯器會按照平臺的特定對齊方式對結構體進行對齊,這樣可以提高內存訪問速度。在Keil Arm工程中,一般使用的是4字節對齊方式,也就是結構體變量的起始地址必須是4的倍數。

例如,考慮以下定義的結構體:

struct MyStruct {
int a;
char b;
short c;
};

根據默認的4字節對齊規則,a的地址是0,b的地址是4,c的地址是8。這樣,結構體的大小為12字節。

  1. 使用編譯器指令設置結構體的對齊方式
    在Keil Arm工程中,可以使用編譯器指令來設置結構體的對齊方式。常用的編譯器指令有#pragma pack(n)和__attribute__((packed))。這些編譯器指令可以用來設置結構體的對齊邊界。

a. #pragma pack(n)
使用#pragma pack(n)指令可以將結構體的對齊方式設置為n字節對齊。例如,如果需要將結構體設置為1字節對齊,可以使用以下指令:

#pragma pack(1)
struct MyStruct {
int a;
char b;
short c;
};

這樣,結構體的大小為7字節,a的地址是0,b的地址是4,c的地址是5。

b. attribute ((packed))
使用__attribute__((packed))屬性也可以將結構體的對齊方式設置為1字節對齊。例如:

struct MyStruct {
int a;
char b;
short c;
} __attribute__((packed));

這樣,結構體的大小為7字節,a的地址是0,b的地址是4,c的地址是5。

需要注意的是,使用這些編譯器指令會破壞默認的對齊方式,可能導致內存訪問速度下降或者有潛在的錯誤。

  1. 對齊方式的影響
    結構體的對齊方式會直接影響內存的布局和訪問速度。使用更小的對齊邊界可以減小內存占用,但也可能導致訪問內存的效率下降。在Keil Arm工程中,使用1字節對齊可能會導致額外的內存操作,從而影響程序的性能。因此,調整結構體的對齊方式需要謹慎考慮。
  2. 最佳實踐
    在Keil Arm工程中,為了獲取最佳的性能和存儲效率,可以采用以下幾個最佳實踐。

a. 對于需要按照字節進行訪問的結構體成員,將其定義為字符類型,避免對齊帶來的性能損失。

struct MyStruct {
char a; // 1字節對齊
};

b. 對于多字節類型的成員,按照默認的對齊方式進行定義,避免額外的訪問操作。

struct MyStruct {
int a; // 默認對齊方式
};

c. 如果需要改變結構體的對齊方式,根據實際需求來使用#pragma pack(n)或者__attribute__((packed))指令。但是,需要謹慎權衡性能和存儲效率的權衡。

通過以上的介紹,你應該有一個清晰的了解關于在Keil Arm工程中如何實現結構體1字節對齊的方法,并且你可以根據實際情況靈活使用它。在選擇結構體對齊方式時,需要根據程序的性能要求和存儲要求來綜合考慮,以獲得最佳的性能和存儲效率。

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

    關注

    117

    文章

    3798

    瀏覽量

    81464
  • 字符
    +關注

    關注

    0

    文章

    234

    瀏覽量

    25266
  • keil
    +關注

    關注

    69

    文章

    1214

    瀏覽量

    167371
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49318
收藏 人收藏

    評論

    相關推薦

    AAPCS規則要求堆棧保持8字節對齊(轉)

    的STKALIGN置位,來保證中斷的棧8字節對齊,具體實現過程如下:當發生中斷時由硬件自動檢測MSP是否8字節
    發表于 01-19 11:43

    C語言-結構對齊詳解

    4字節對齊處存放,結構對齊后的大小必須4的倍數,如果編譯器設置為8字節
    發表于 07-12 16:41

    請問IAR如何設置按1字節對齊

    本帖最后由 一只耳朵怪 于 2018-6-6 15:26 編輯 如題,求問大家,IAR如何設置按1字節對齊
    發表于 06-06 02:22

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

    z-stack的結構默認對齊方式是一字節嗎?在z-stack可以將一般指針強制轉換為結構
    發表于 08-18 07:38

    請問F28335字節對齊能不能改為1字節

    大家好,C2000成員TMS320F28335在CCS3.3下是2字節對齊的,能不能改為1字節對齊?怎么改呢?再者,有沒有在F28335下成
    發表于 08-20 06:41

    為什么MMU實驗不是4字節對齊

    是4B的一級描述符,圖上寫錯了,抱歉這個是韋老師MMU實驗的C語言源碼,可以正常使用,但是問題來了,4B的描述符地址的[1:0]位應該是00啊,也就是4字節對齊啊,可是這里明顯不是4字節
    發表于 08-05 03:26

    align為什么要8字節對齊

    我知道數據儲存的起始地址%對齊字節(N)=0才行,但是我不明白有兩點問題1:UCOSIII的系統的浮點數打印任務的堆棧大小要8字節
    發表于 04-23 00:21

    使用的開發環境為MAPLAB X IDE 1字節對齊實現

    使用的開發環境為MAPLAB X IDE 1字節對齊實現如下#pragma pack(1)typedef union{uint8_t bu
    發表于 11-24 06:21

    STM32終極字節對齊的相關資料推薦

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

    keil MDK中程序讀寫結構成員進入HARDFAUL HANDLE RET為什么無法讀寫?

    ]; ~ ~ DX[18]; Y[18]; }eedata; #pragma pack(pop)//恢復對齊狀態 這里keilshort int 占兩字節 float占四
    發表于 08-25 07:58

    基于ARM程序的字節對齊的分析

    任意值。如果一個數據是以能被4 整除的地址開始的連續存儲,那么它就是對齊,否則就是非對齊。舉例說明四字節
    發表于 09-19 16:04 ?0次下載

    解析C語言結構字節如何對齊

    我們不使用宏#pragma pack,采用默認字節對齊方式。 先拋出結論: 在一個結構第一個成員變量放在偏移為0的位置,以后的變量都存儲
    的頭像 發表于 06-12 17:42 ?3156次閱讀

    STM32 終極字節對齊解析

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

    什么是結構字節對齊現象

    什么是結構字節對齊現象 程序員,咱都用代碼說話,先上 code: (說明:以下代碼均在 ARM 平臺上,使用
    的頭像 發表于 11-20 15:55 ?684次閱讀
    什么是<b class='flag-5'>結構</b><b class='flag-5'>體</b>的<b class='flag-5'>字節</b><b class='flag-5'>對齊</b>現象

    嵌套的結構 字節是如何對齊

    嵌套的結構字節又是如何對齊的呢 先來看下面的代碼 typedef struct stu1 { char ary [ 5 ] ; int
    的頭像 發表于 11-20 16:01 ?611次閱讀
    嵌套的<b class='flag-5'>結構</b><b class='flag-5'>體</b> <b class='flag-5'>字節</b>是如何<b class='flag-5'>對齊</b>的
    主站蜘蛛池模板: 永久手机看片福利盒子 | 色播在线 | 五月天婷婷在线视频国产在线 | 色97色| 视频高清正版在线观看 | 久久综合狠狠综合久久综合88 | 波多野结衣福利 | 一级特黄特色的免费大片视频 | 国产成年美女毛片80s | 福利视频第一区 | 丁香六月婷婷综合 | 五月婷婷六月综合 | 夜夜网站| 美女扒开尿口让男人捅 | 天堂网www在线资源 天堂网www在线资源链接 | 久久精品香蕉视频 | 羞羞色院91精品网站 | 色综合色综合色综合色综合网 | 国产精品主播在线观看 | 午夜影音 | 色月丁香| 天天干天天干天天干天天干天天干 | 加勒比啪啪| 天堂网资源 | 人人干天天操 | 99久久婷婷免费国产综合精品 | 男人j进人女人j 的视频 | 美女扒开尿口给男的桶个爽 | 国产美女被艹 | 欧美第四色 | 中文字幕一精品亚洲无线一区 | 亚洲青青草原 | 俄罗斯毛片基地 | 天天好比网| 午夜毛片免费观看视频 | 天天草天天干 | 国产精品第页 | 在线色站 | 色婷婷基地 | 免费大片黄在线观看日本 | 嘿嘿午夜|