C語言結構體變數記憶體配置與地址對齊

來源:互聯網
上載者:User

標籤:

地址對齊簡單來說就是為了提高訪問記憶體的速度。

數組的地址分配比較簡單,由於資料類型相同,地址對齊是一件自然而然的事情。

結構體由於存在不同基礎資料型別 (Elementary Data Type)的組合,所以地址對齊存在不同情況,但總體來說有以下規則:

原則1:資料成員對齊規則:結構的資料成員,第一個資料成員放在位移量(offset)為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始(比如int在32位機為4位元組,則要從4的整數倍地址開始儲存)。

原則2:收尾工作:結構體的總大小,也就是sizeof的結果,必須是其內部最大成員的整數倍,不足的要補齊。

原則3:結構體作為成員:如果一個結構裡有某些結構體成員,則結構體成員要從其內部最大元素大小的整數倍地址開始儲存。(struct a裡存有struct b,b裡有char,int,double等元素,那b應該從8的整數倍開始儲存。)

比如

struct type1 {int a; double b;}

如果:int 佔4個位元組,double佔8個位元組;

1.分析對齊規則:

int 位移量為0,如果在int後直接存double,double的起始位置就是4,不符合對齊規則,所以double起始位置為8。

2.分析收尾規則:

int佔4個位元組,補4個位元組,double佔8個位元組。一共16個位元組,是內部最大成員(8)的整數倍。所以sizeof(type1)=16;

C語言結構體變數記憶體配置與地址對齊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.