C++内存分配问题

classA{inta1;virtualvoida3();doublea2;};cout<<sizeofA<<endl;输出的结果是24,为什么不是16呢?内存对齐我知道... class A
{

int a1;
virtual void a3();
double a2;
};
cout<<sizeof A<<endl;
输出的结果是24,为什么不是16呢?
内存对齐我知道的,但是 int 是4个字节,虚函数地址也是4个字节刚好8个字节啊 double也是 8个字节 刚好不需要对齐的啊。比如说我把程序改成class A
{

int a1;
int a3;
double a2;
};
那么结果就是16了 我想知道为什么?
展开
 我来答
司琅0Iid5b
2010-11-16 · TA获得超过802个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:617万
展开全部
你好,这个结果跟C++内存分配机制有关系。

在A这个类当中,存在double类型的成员变量,在对A进行内存分配的时候,会采用8字节对齐的方式,所以sizeof(A)的结果为3 * 8 = 24。

如果我们将double a2;修改为int a2;结果就会是12,因为成员变量的基本类型所占空间最大的为int类型,所以会采用4字节对齐的方式。

class A
{

char a1;
virtual void a3();
char a2;
};

此时sizeof(A) == 8 ,道理同上,最大的成员所占内存最大的是a3,采用4字节对齐,a1,a2放在同一个4字节当中。

class A
{

char a1;
char a2;
};

sizeof(A) == 2,同上。

补充:
楼主,你的说法是正确的,现在我也搞不清楚,内存分配是怎么进行的了。
niinor
2010-11-15 · TA获得超过2246个赞
知道小有建树答主
回答量:2047
采纳率:0%
帮助的人:1357万
展开全部
内存对齐,针对不同的编译器,结果也可能不同
http://www.cppblog.com/Niino/archive/2008/07/23/56973.html
你可以参考这篇文章
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式