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

帮我解决一个sizeof的问题

小治 发布于 2010-12-10 01:12, 1391 次点击
为什么使用sizeof计算的类型和类的空间大小不一样?为什么会多两个字节?
#include<iostream>
using namespace std;
class A
{
private:
  int i;
  short j;
};
int main()
{
  cout<<sizeof(int)<<endl;
  cout<<sizeof(short)<<endl;
  cout<<sizeof(int)+sizeof(short)<<endl;
  cout<<sizeof(A)<<endl;//就是这里不是很清楚
  return 0;
}
希望大家解释一下!谢谢
13 回复
#2
makebest2010-12-10 09:06
系统在读一个大小是N的变量时, 如果它的地址是 N 的倍数, 效率是最高的.
为此, 默认情况下, 在结构中, 变量的地址如果不符合上面的规则, 适当往后移.
如果结构中最大是变量是N, 则整个结构的大小也是N的倍数.

如果要改变这种规则可以用下面的设置, 会牺牲效率:
#pragma pack (1)
#3
Lyone2010-12-10 09:23
我猜是因为:类除了你定义的两个变量,还包括其他的信息。比如构造函数,和析构函数。
#4
laoyang1032010-12-10 11:04
问题不是猜的  2楼说的很对  确实最大数据类型的整数倍
#5
xishui7772010-12-10 11:23
学习下
#6
qshzh1022010-12-10 14:48
就是int占用的空间的整数倍,short占用的空间也是和int的一样的,而不是说实际占用的空间
#7
pangding2010-12-10 22:05
2楼 说的就基本正确了。这是所谓内存对齐的问题,目的就是为了提高访问效率。大家有兴趣可以自己去查查 内存对齐。

这个程序也在说明,使用 sizeof 可以提高程序的移植性。不要自己擅自猜测一个结构的大小。
#8
DreamSkyCC2010-12-11 09:26
x86四字节对齐!
#9
kittel2010-12-11 18:11
回复 楼主 小治
学习了
#10
zgxyz20082010-12-11 19:38
这就是传说中的字节对齐机制~
#11
谢谆本2010-12-12 23:42
学习了
#12
小治2010-12-13 21:00
谢谢大家了!
#13
WPZAC2010-12-14 14:09
这里牵扯一个字节对齐问题,关于字节对齐有三个要求
#14
df198610172010-12-18 23:01
字节对齐
1