整数边界对齐方式_内存变量边界对齐

本文介绍了内存对齐的基本原理,包括编译器如何按照成员顺序分配内存,以及如何通过填充额外字节确保边界对齐。通过示例代码展示结构体在不同成员顺序下内存布局的差异,强调了内存对齐对于提高处理器效率的重要性。
摘要由CSDN通过智能技术生成

一、什么是内存对齐

(1)   原理

a)  编译器按照成员列表的顺序给每个成员分配内存.

b)  当成员需要满足正确的边界对齐时,成员之间用额外字节填充.

c)  结构体的首地址必须满足结构体中边界要求最为严格的数据类型所要求的地址.

d)  结构体的大小为其最宽基本类型的整数倍.

(2)   程序设计

1 #include

2

3 #include

4

5 #include

6

7 using namespace std;8

9 struct node110

11 {12

13 charc;14

15 charb;16

17 inta;18

19 }n1;20

21 struct node222

23 {24

25 charc;26

27 inta;28

29 charb;30

31 }n2;32

33 intmain()34

35 {36

37 //内存大小

38

39 int size1=sizeof(node1);40

41 int size2=sizeof(node2);42

43 printf("%d %d\n",size1,size2);44

45 //具体地址46

47 //node1

48

49 cout<

51 cout<

53 cout<

55 //node2

56

57 cout<

59 cout<

61 cout<

63 return 0;64

65 }

View Code

(3)   结果

实验显示结果为

(4)   分析

a)    node1和node2的成员相同,但成员的顺序不一样,所以总体占用的空间不一样,验证了编译器按照成员列表的顺序给每个成员分配内存。

b)   对于node1和node2,分别输出每个成员的占用空间,发现char c和char b顺序紧挨时,各占据一个字节;char a 和char b相隔时,各占据4个字节。验证了当成员需要满足正确的边界对齐时,成员之间用额外字节填充.

c)    实验表明,内存变量是按边界对齐。

从处理器的角度来看,需要尽可能减少对内存的访问次数以实现对数据结构进行更加高效的操作。为什么呢?因为尽管处理器包含了缓存,但它在处理数据时还得读取缓存中的数据,读取缓存的次数当然是越少越好!如上图所示,在采用边界对齐的情况下,当处理器需要访问a_变量和b_变量时都只需进行一次存取(图中花括号表示一次存取操作)。若不采用边界对齐,a_变量只要一次处理器操作,而b_变量却至少要进行两次操作。对于b_,处理器还得调用更多指令将其合成一个完整的4字节,这样无疑大大降低了程序效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值