标签:style http ar os sp on 数据 bs ad
※结构体和类之内存分布
1、空类的大小
空类:其实空类至少会占用1个字节的长度。
2、字节对齐
在为结构体和类中的数据成员分配内存时,结构体中的当前数据成员类型长度为M,指定对齐值为N,那么实际对齐值位q=min(M,N),其成员的地址安排在q的倍数上。
vc6.0缺省对齐8个字节
sShort占用2个字节,所以安排的地址0x0012FF70为2的倍数。
nInt占用4个字节,所以安排的地址0x0012FF74为4的倍数。
因为结构体中最大的字段长度为4,所以对齐值调整为4个字节。因为test对象为8个字节,恰好为4的倍数,所以整个对象不用补字节对齐了。
以下tagTwo的size是多少?
在tagTwo中将tagOne解开看,最大的字段长度是8个字节,所以对齐按照8字节来,那么nInt之后需要补4个空字节,而tagOne正好是16个字节,所以是24个字节。那么能否将nInt之后的补齐的4个字节放到tagOne之后呢?就像书上说的各个编译器厂商实现也有所不同。
《C++反编译与逆向分析技术揭秘》之学习笔记02--结构体和类之内存分布
标签:style http ar os sp on 数据 bs ad
原文地址:http://www.cnblogs.com/seven1979/p/4158629.html