读书人

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

发布时间: 2013-10-12 11:54:04 作者: rapoo

请教一下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

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

读书人网 >C++

热点推荐