首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一下sizeof字节对齐的有关问题

2013-10-12 
请教一下sizeof字节对齐的问题?如下代码:classA{public:char ch[5] //0-4double dou //8-15}class B :

请教一下sizeof字节对齐的问题?
如下代码:


class  A
{
public:
char ch[5]; //0-4
double dou; //8-15
};

class B : public A
{
public:
virtual void fun () {}; //16-19
public:
short sh; //20-21  ->  23
};

求sizeof(A)和sizeof(B)时,我知道sizeof(A) = 16,没有问题。
但是sizeof(B) 应该等于24啊,怎么运行的结果是32呢?
[解决办法]
引用:
Quote: 引用:

VS下用/d1reportSingleClassLayout打印内存布局看看
class B size(32):
        +---
 0      
[解决办法]
 {vfptr}
        
[解决办法]
 +--- (base class A)
 8      
[解决办法]
 
[解决办法]
 ch
        
[解决办法]
 
[解决办法]
 <alignment member> (size=3)
16      
[解决办法]
 
[解决办法]
 dou
        
[解决办法]
 +---
24      
[解决办法]
 sh
        
[解决办法]
 <alignment member> (size=6)
        +---
一般内存布局跟编译器也有一定的关系,这个就很难说了

谢谢!这个工具挺好。这种布局不同的编译器会有不同吗?linux下有什么工具可以查看内存布局?

gcc好像是用-fdump-class-hierarchy命令,我不太清楚,你可以试试看
内存布局多少会和编译器有一定关系,特别是虚函数表,不同编译器都不一样,所以结构也有可能会不一样。有兴趣可以看一下《深度探索C++对象模型》这本书
[解决办法]
《深度探索C++对象模型》
《C++反汇编与逆向分析技术揭秘》
[解决办法]
引用:
Quote: 引用:

这得看B对象的内存布局了 如果虚函数表指针放在对象头部那就为32 要是放在父类成员后面那应该是24

虚函数表指针位置不是固定的吗?
 不同编译器不一样

热点排行