三个数据,一共6种排列: int 4B char 1B short 2B 根据内存对齐原则: 1. char int short char1 + 空3 + int4 + short2 + 空2 = 12 2. char short int char1 + 空1 + short2 + int4 = 8 3. int short char int4 + short2 + char1 + 空1 = 8 4. int char short int4 + char1 + 空1 + short2 = 8 5. short int char short2 + 空2 + int4 + char1 + 空3 = 12 6. short char int short2 + char1 + 空1 + int4 = 8
o x x x | o o o o | o o (x表示额外添加的字节)
0 1 2 3 4 5 6 7 8 9 (地址)
o x x x | o o o o | o o x x (x表示额外添加的字节)
0 1 2 3 4 5 6 7 8 9 a b (地址)
==> char1 + 空3 + int4 + short2 + 空2 = 12, 共12字节o x o o | o o o o | (x表示额外添加的字节)
o x o o | o o o o | (x表示额外添加的字节)
o o o o | o o o (x表示额外添加的字节)
o o o o | o o o x | (x表示额外添加的字节)
o o o o | o x o o | (x表示额外添加的字节)
o o o o | o x o o | (x表示额外添加的字节)
o o x x | o o o o | o (x表示额外添加的字节)
o o o x | o o o o | (x表示额外添加的字节)
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节