注册 登录
编程论坛 C++教室

C++对齐问题求助

bitzyh 发布于 2013-05-30 13:07, 567 次点击
class A
{
public:
int a;
double d;
A(){}
virtual ~A(){}
};

我的计算是:4+4+8=16,但实际结果是sizeof(A) =24,其内存分布如下所示:
1>  class A        size(24):
1>          +---
1>   0        | {vfptr}
1>   8        | a
1>            | <alignment member> (size=4)
1>  16        | d
1>          +---

系统把a放在第八个字节上,但为什么不能放在第4个字节上,也许会说按八字节对齐,但计算机应该是首先一个一个对齐,然后整体对齐
3 回复
#2
peach54602013-05-30 14:21
首先,我也没搞明白
其次,深究字节对齐干嘛?
#3
lz10919149992013-05-30 15:54
程序代码:

    12345678
vptr----****
d   --------
a   ----****



'*'代表空洞,'-'代表实际占用的内存。如果成员vptr在A中的顺序能放到成员d之后,那么sizeof(A)就会返回16

[ 本帖最后由 lz1091914999 于 2013-5-30 15:56 编辑 ]
#4
gfchen18192013-05-30 17:24
如果32位系统,int占4字节,double占8字节,虚函数表有个指针占4字节
然后内存(8字节)对齐,4个虚函数表指针+4个int = 8
                8个double = 8
        结果16;
如果class A
{
public:
double d;
int a;
A(){}
virtual ~A(){}
};
这个结果为24,自己分析
1