绝对强大的三个linux指令: ar, nm, objdump |
您所在的位置:网站首页 › Nm与Nm › 绝对强大的三个linux指令: ar, nm, objdump |
绝对强大的三个linux指令: ar, nm, objdump
grant-bobo: 命令确实强大,不过内容杂的看着眼花 zz: C++类中的对象在内存中的存放方式carrotshuan 回复 wendong123123: 这位兄台说的很有到底,原文是应该改下,我看第一眼就被误导了,后来做实验增加虚函数个数时发现空间并没有变化才发现有端倪。 这里我提出自己的一点异议:上面类对象占用的空间是24个字节肯定是没有问题的,但是分配我觉得应该是虚表指针会单独存储并以对齐的方式访问,并放在对象的起始空间。即虚表指针此时是占8个字节,然后a,c,e对齐后占8个字节,最后是double型的b占8个空间,共24个字节,我用自己电脑验证了上面的猜测,不知道是否有思考遗漏之处,还请点出指正。 zz: C++类中的对象在内存中的存放方式wendong123123: 建议修改一下,否则误人子弟。一个对象中的起始地址存放虚表指针(如果有虚函数),占4个字节,这个指针指向一个虚表,所有虚函数地址都记录在虚表中,但是和这个对象无关,对象只保存了虚表的首地址。由于你定义的这个类最大字长是double,8字节,因此系统自动8字节对齐。所以分布为:第一个8字节:虚表指针4字节+int变量4字节;第二个8字节:两个char变量2字节,但是由于对齐,占用了8字节;第三个8字节为double变量。不信你可以将double换成int,就变成16字节。因为这时候是4字节对齐,第一个4字节:虚表指针;第二个4字节:int型变量;第三个4字节:2个char变量;第四个4字节:int型变量。 另外:如果一个空类,定义的对象和类本身都是占用一个字节,静态变量不占用对象空间。 zz: C++类中的对象在内存中的存放方式kentonlo: 兄弟,你的解释错了,虚函数指针只有一个。上面长度是24是因为字节对齐问题,并非有两个虚指针。上面是8字节对齐,虚指针和第一个int占8字节,后面两个char占8字节,double b占8字节,静态不占,所以才是24。 ITUNES 中文歌曲乱码travellers: 谢谢! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |