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了 我想知道为什么? 展开
{
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了 我想知道为什么? 展开
2个回答
展开全部
你好,这个结果跟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,同上。
补充:
楼主,你的说法是正确的,现在我也搞不清楚,内存分配是怎么进行的了。
在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,同上。
补充:
楼主,你的说法是正确的,现在我也搞不清楚,内存分配是怎么进行的了。
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询