字节大小的字节计算

时间:2014-01-28 14:57:55

标签: c++

什么是sizeof(salesman)?它说48个字节,需要解释原因。

class customer {
  char c;
  double l;
  int k;
};

class salesman: private customer{
   int salno;
   char salname[20];
   protected :
    float salary;
 };

2 个答案:

答案 0 :(得分:4)

嗯,很难猜测编译器。

但是customer可能合理地要求1 + 7 + 8 + 4 + 4 = 20个字节(7个和最后4个是填充)。然后为salesman增加了4 + 20 + 4 = 28,看起来编译器足够聪明,可以在进行子类化时从customer中删除最后4个字节的填充。那是48!

以上假设sizeof (int)sizeof (float)为4,sizeof (double)为8。

答案 1 :(得分:1)

根据以下假设:

  • char的大小为1个字节

  • int的大小为4个字节

  • float的大小为4个字节

  • double的大小为8个字节

  • 添加了填充,因此大小为N的变量始终位于可被N整除的地址

salesman个实例的内存映射是:

Byte   0   : char   c;
Bytes  8-15: double l;
Bytes 16-19: int    k;
Bytes 20-23: int    salno;
Bytes 24-43: char   salname[20];
Bytes 44-47: float  salary;

因此salesman实例的总大小为48个字节。

但请注意,上述假设在每个编译器上都不一定正确。