结构体内存对齐的原则及原理

结构体是C语言的一大特色,今天就来思考两个问题。

  1. 它的成员的顺序排列有什么要求吗?

原则一:结构的首变量地址偏移量offset0,之后每个变量的首地址都要是其本身宽度的整数倍。总size=(0+1)+(3+4)+(0+8)=16

 

原则二:结构体的大小一定是最大成员宽度的整数倍,依照原则1,总size=8+4+1=13;因为原则二,所以要在char后补齐3位,总size=16

 

  2.为什么要设计内存对齐这种方式?

cpu需要取4个连续的字节时,若内存起始位置的地址可以被4整除,那么我们称其对齐访问,首先很多CPU并不支持非对齐的内存访问,比如我们使用的stm32(有些x86结构的复杂指令集CPU,可以非对齐内存访问,他采取多次读取对齐的内存,然后拼接数据来实现;但这样会增加数据访问的时间,和电路设计的复杂性);硬件电路为何会更复杂这个问题,先不深入讨论。所以内存对齐明白会提高CPU的访问速度就 OK了。

猜你喜欢

转载自www.cnblogs.com/lzd626/p/9459125.html