为了账号安全,请及时绑定邮箱和手机立即绑定

64位Ubuntu下的奇怪输出结果,sizeof(Class)

Shape.h的代码定义如下:

class Shape {
public:
Shape();
virtual ~Shape();
virtual double calcArea();
};

Circle.h的代码定义如下:

class Circle: public Shape {
public:
Circle(int radius);
~Circle();
//double calcArea();
protected:
int m_radius;
};

Main.cpp主函数的代码及输出结果为:

int main(void)
{
Shape sh;
cout << sizeof(sh) << endl;
// Output: 8
Circle ci(100);
cout << sizeof(ci) << endl;
// Output: 16
return 0;
}

这里就对第二输出16不理解了,Shape类由于有虚函数表指针占8字节,Circle自身只有int类型的一个变量占4字节,那总共应该8+4=12字节呀?为啥这里是16字节呢?

我猜测是不是因为内存对齐的问题,求解释呀!各位大神


正在回答

3 回答

一般这种情况都是因为内存对齐

1 回复 有任何疑惑可以回复我~
#1

帅踢锅 提问者

请问64-bit Ubuntu的对齐单位是8字节吗?哪里可以查到每个系统的对齐标准呀
2015-10-04 回复 有任何疑惑可以回复我~
#2

onemoo 回复 帅踢锅 提问者

基本上是CPU寻址对地址对齐有要求,不能说是和系统相关。 一般在写代码时脑中有这个概念就可以了,我也没有把这些都背下来。 要是问我哪里能查到,我只能说各CPU厂商的产品规格手册中详细说明了这些。
2015-10-04 回复 有任何疑惑可以回复我~
#3

帅踢锅 提问者 回复 onemoo

原理是这样!onemoo果然是大神啊,两三次都是您回复的。实在太感谢啦
2015-10-04 回复 有任何疑惑可以回复我~

内存对齐可以参考:《计算机组成原理》

0 回复 有任何疑惑可以回复我~

今天也想到了这个问题,忘了字节对齐的概念了,原来如此。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66236    人
  • 解答问题       314    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

64位Ubuntu下的奇怪输出结果,sizeof(Class)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信