C語言結構體 位元組對齊

2021-08-26 23:53:33 字數 921 閱讀 4010

目的:犧牲一點空間,換時間的效率(cpu執行效率) 

最終結構體大小一定是4的倍數(32bit系統)

結構體裡成員變數順序不一致,也會影響結構體的大小

資料型別

32位機大小(位元組)

64位機大小(位元組)

char11

short22

int4

4long48

指標型別48

double88

float44

unsigned int44

long long88

#includestruct abc;

int main()

執行結果:

ubuntu@ubuntu-virtual-machine:~$ gcc struct.c -o struct

ubuntu@ubuntu-virtual-machine:~$ ./struct

the size of struct abc is 8

在此程式中cpu讀結構體變數時,第一次需要讀取乙個位元組,第二次需要讀取四個位元組。而32bitcpu每次最大可讀取4byte,用sizeof讀取結構體大小,一定是4的倍數。

#includestruct abc;

struct aeo;

int main()

執行結果:

ubuntu@ubuntu-virtual-machine:~$ ./struct

the size of struct abc is 8

,aeo is 12

在結構體abc中a佔乙個位元組剩餘三個位元組,b佔兩個位元組,在三個位元組裡面夠放,所以a、b一起佔四個位元組

嵌入式c語言面試必備(結構體位元組對齊的方法和大小確定)

C語言結構體的位元組對齊

在c語言中,結構是一種復合資料型別,其構成元素既可以是基本資料型別 如int long float等 的變數,也可以是一些復合資料型別 如陣列 結構 聯合等 的資料單元。在結構中,編譯器為結構的每個成員按其自然對界 alignment 條件分配空間。各個成員按照它們被宣告的順序在記憶體中順序儲存,第...

C語言結構體的位元組對齊

下面直接來看例子吧 測試環境為32位的系統 以下結構體分別佔多少位元組 struct a sizeof a 3 因為a b c按照1個位元組進行對齊 struct b sizeof b 8 按照4個位元組對齊 a佔4位元組 b佔乙個位元組 c佔2個位元組 有1個位元組剩餘 struct c size...

C語言結構體位元組對齊總結

首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組。位元組對齊有什麼好處?以int型資料為例,如果它在記憶體中存放的位置按4位元組對齊,也就是說1個int的資料全部落在計算機一次取數的區間內,那麼只需要取一次就可以了。如...