C++中 基本数据类型的变量不能简单的存储于内存中的任意地址,他们的起始地址必须能被他们的大小整除。
如:32位平台,Int型的地址须能让4整除。
typedef unsigned char BYTE;
enum Color { RED=0x01,BLUE,GREEN,YELLOW,BLACK};
struct Eigth
{
double m_price;
Color m_color;
bool m_isShift;
bool m_bool;
BYTE m_byte;
};
//sizeof(eigth) =32
常常我们会去完全满足它的自然对齐要求,同时会去满足其每个成员的自然对齐要求,这是个非常浪费内存的行为。
那么该怎么样去节省内存?
显然是设法减少对象中的空洞,宁愿让末尾留下空洞,也不要让中间留下空洞,尽量让所有成员连续存放,
并将少末尾的填充字节,
方法:安装从大到小的顺序从前到后依次声明每一个数据成员。并且尽量使用较小的成员对齐方式
修改后:
struct Eigth
{
bool m_bool;
Color m_color;
bool m_isShift;
double m_price;
BYTE m_byte;
};
//sizeof(Eigth) =16
呵呵, 挺夸张的