VC++中内存对齐
我们经常看到求 sizeof(A) 的值的问题,其中A是一个结构体,类,或者联合体。 为了优化CPU访问和优化内存,减少内存碎片,编译器对内存对齐制定了一些规则。但是,不同的编译器可能有不同的实现,本文只针对VC++编译器,这里使用的IDE是VS2012。 #pragma pack()是一个预处理,表示内存对齐。布局控制#pragma,为编译程序提供非常规的控制流信息。 /**********结构体的大小的规则*************/ 结构体大小是处理器位数和结构体内最长数据元素所占字节数二者中较小的那一个的整数倍。 比如说,假设处理器位数为n,结构体内最大数据元素所占字节数为m。 处理器为32位,n = 4;结构体内最大数据类型为short,m = 2; n > m;结构体大小为m的整数倍,反之亦然。 注意:有些虽然是64位的操作系统,但是编译器却是32位的,此时位数为32. 1 class A{ 2 int a; 3 char b; 4 short c; 5 }; sizeof(A)为8,为4的整数倍。 1 struct B{ 2 short a; 3 short b; 4 short c; 5 }; sizeof(B)为6,为2(sizeof(short))的整数倍。 注意:C++中的结构体与类只有一个区别,就是结构体成员默认是public