C語言 結構體與記憶體對齊準則簡單理解

2021-08-19 13:54:24 字數 553 閱讀 6801

平時基本不涉及這個問題,被問起才發現沒那麼簡單。。。

一,結構體:記憶體中所有型別位元組之和

#includestruct icd

;struct cdi

;struct merge

;int main(void)

1.首先要找到結構題中所佔位元組數最大的型別,icd中最大位元組數為8,則int為4,char為1,則為11111(注:1為本身所佔位元組數,0為所補位元組)右起補3,則為11111,000,再加上double,則為16

2,同理,當char為1,下乙個為double=8,則char右起補7,則為1,0000000,11111111,最後int=4,則末尾補4,則為1,0000000,11111111,1111,0000=24.

3.結構體的巢狀,將被巢狀的結構體打散,找出最長型別,接下來按照同樣方法去做就行了,如:

char=1,merge{char,cdi,int,}其中cdi最長型別為8,則為1,0000000,(11111111,11111111,11111111),1111,0000;可知為40

C語言結構體對齊 記憶體對齊問題

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...

C語言結構體的記憶體對齊

學過c語言的大家應該都學到過結構體,結構體是一種聚合資料型別,它可以把不同型別的資料儲存在一起,我們把結構體中儲存的資料叫做結構體成員。了解了結構體後,我們來談一談結構體在計算機系統中是如何儲存的,首先,我們來看看下面這段 struct a int main 這段 中我們分別定義了三個結構體成員,按...

C語言結構體之記憶體對齊

首先看乙個例子,下面有乙個結構體 struct structtest1 假設這個結構體成員在記憶體中是緊湊排列的,那麼c1的儲存位址就是0,s的儲存位址是1 2,c2的儲存位址是3,i的儲存位址是4 7,c1的位址是0000000000000000,s的位址是0000000000000001,c2的...