32 64位編譯器各型別大小和位元組對齊

2021-09-05 11:53:49 字數 1926 閱讀 2214

32位編譯器:32位系統下指標占用4位元組

char:1個位元組

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

shortint :2個位元組

int:  4個位元組

unsigned int: 4個位元組

float:  4個位元組

double:   8個位元組

long:   4個位元組

longlong:  8個位元組

unsigned long: 4個位元組

64位編譯器:64位系統下指標占用8位元組

char:1個位元組

char*(即指標變數): 8個位元組

shortint :2個位元組

int:  4個位元組

unsigned int: 4個位元組

float:  4個位元組

double:   8個位元組

long:   8個位元組

longlong:  8個位元組

unsigned long: 8個位元組

位元組對齊的細節和具體編譯器實現相關,但一般而言,滿足三個準則:

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;

2) 結構體每個成員相對於結構體首位址的偏移量都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組;例如上面第二個結構體變數的位址空間。

3) 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。

4)結構體作為資料成員的對齊規則:在乙個struct中包含另乙個struct,內部struct應該以它的最大資料成員大小的整數倍開始儲存

64位編譯器:

example1:

structa;

記憶體大小:sizeof(a)=8+((2+4)+2)+8 =24

注:括號部分填充2個位元組對齊

example2:

struct b

;      記憶體大小:sizeof(b) = (1+7) + 8+ (4+4) = 24, 注:前部分填充7個位元組補齊,後面填充4個位元組補齊

example3:

struct c

;

記憶體大小:sizeof(c) = (4+4) + 24 + (1+7) = 40, 注:前部分填充4個位元組補齊,後面填充7個位元組補齊

(C 基礎)在32,64位系統下各型別的大小

型別32位 64位int44 long int44 short int22 unsigned int44 unsigned long int44 unsigned short int22 char111 unsigned char11 float44 double88 long double88 u...

C C 編譯器對struct大小的處理

一 什麼是對齊,以及為什麼要對齊 1.現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。2.對齊的作...

大小端對位元組序和位序的影響

1 位元組序 byte order 大端儲存格式 即多位元組資料的高位元組儲存在低位址中,而低位元組資料存放在高位址中。小端儲存格式 即多位元組資料的高位元組儲存在高位址中,而低位元組資料存放在低位址中。例子 short型別的資料 0x0201 大端儲存格式 存放內容 0x02 0x01 記憶體位址...