内存紧凑对齐

来源:互联网 发布:出租车计价软件 编辑:程序博客网 时间:2024/06/06 02:43

以前对于内存紧凑对齐总是和模糊今天终于弄明白了,拿出来分享下

当用户指定一个Alignn(或编译器的缺省)时,每种数据类型的实际Align值定义如下:

Actual Align = min(n,Natual Align);  其中  Natual 值为数据类型的大小或者结构的实际Align大小

结构体(struct):结构Align值等于该结构所有成员的Actual Align 值中最大的一个Align

数组(array):数组的Align值等于该数组成员的Actual Align

联合体(union):联合的Align值等于该联合体最大成员的Actual Align

编译器是如何根据一个类型的Align值来分配存储空间:、

有如下规则:

1 一个结构成员的offset(偏移量,即起始地址)等于该成员Actual Align 值的整数倍,如果不足,就在其前填充

(padding)

2 一个结构(整体大小)等于该结构Actual Align值的整数倍,如果不足,则在其最后填充完(padding)

 

原创粉丝点击