【C语言】结构体内存对齐模式

版权声明:本文为博主原创文章,如需转载请注明出处。

  结构体内存对齐模式各种情况代码详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>

struct A
{
int a; // 此时结构体占用4个字节
char b; // 此时结构体占用8个字节
char c; // 还是8个字节
char d; // 还是8个字节
char e; // 还是8个字节
char f; // 现在是12个字节
};

struct B
{
char a; // 1个字节
char b; // 2个字节
char c; // 3个字节
};

struct c
{
char name[10]; // 10个字节
char a; // 11个字节
// 对于char型数组来说,会把数组每个元素当作一个char类型
};

struct d
{
int name[10]; // 40个字节
char a; // 44个字节
char b; // 44个字节
};

struct e
{
char a; // 1个字节
int b; // 8个字节
char c; // 12个字节
// 这种写法内存的消耗相比A就会变大
};

struct f
{
char a; // 1
short b; // 4注意这里short占用的是剩下三个字节中的后两个
// 内存对齐总是以2的倍数对齐
char c; // 所以此时是6
int d; // 12
short e; // 16
char f; // 16
};