码迷,mamicode.com
首页 > 编程语言 > 详细

《C++反编译与逆向分析技术揭秘》之学习笔记02--结构体和类之内存分布

时间:2014-12-11 23:45:02      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:style   http   ar   os   sp   on   数据   bs   ad   

※结构体和类之内存分布

1、空类的大小
空类:其实空类至少会占用1个字节的长度。
bubuko.com,布布扣bubuko.com,布布扣

2、字节对齐
在为结构体和类中的数据成员分配内存时,结构体中的当前数据成员类型长度为M,指定对齐值为N,那么实际对齐值位q=min(M,N),其成员的地址安排在q的倍数上。
bubuko.com,布布扣 bubuko.com,布布扣
bubuko.com,布布扣bubuko.com,布布扣
vc6.0缺省对齐8个字节
sShort占用2个字节,所以安排的地址0x0012FF70为2的倍数。
nInt占用4个字节,所以安排的地址0x0012FF74为4的倍数。
因为结构体中最大的字段长度为4,所以对齐值调整为4个字节。因为test对象为8个字节,恰好为4的倍数,所以整个对象不用补字节对齐了。

以下tagTwo的size是多少?
bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣
在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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!