自然对齐:sizeof struct, union

来源:互联网 发布:d3.js 地图热力图 编辑:程序博客网 时间:2024/04/29 11:45

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie


自然对齐:

1.一个类型实例的大小要能整除其地址值

2.数组有着和数组里类型本身相同的对齐要求。

3.一个聚集类型的实例,其对齐要求最严格的子类型的排列要能整除聚集的地址

在32位机器上,

内建类型主要考虑它的存放地址值

char的大小为1(以字节计),所以它可以被存储在内存的任意地址处

short的大小为2,所以它只能存储在“偶数”地址处

integer和指针的大小为4(32位机上一个字为4个字节),所以它们只能存储在一个字界中

double的大小为8,所以它只能存储在两个字界中

自定义类型除了考虑它内部的内建类型的存放地址值外,还要考虑它的类型实例的大小。如果该大小不能整除其地址值。则要在其后padding


示例:struct




示例:union --》union的大小为联合中最大的变量长度的整数倍

#include <iostream>using namespace std;union {int a;char b[2];} u;int main(int argc, char *argv[]){u.b[0] = 0x01;u.b[1] = 0x11;int a = 0x1101;cout << sizeof(u) << endl;cout << u.a << endl;cout << a << endl;system("pause");}
输出:

4

4353

4353

参考:《大规模C++程序设计

0 0