+ -
当前位置:首页 → 问答吧 → 关于sizeof(class)中有虚函数的问题

关于sizeof(class)中有虚函数的问题

时间:2010-07-21

来源:互联网

  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. class A
  4. {
  5.     int func1()
  6.     {
  7.         return 0;
  8.     }
  9. };

  10. class B
  11. {
  12.     int index;
  13. };

  14. class C
  15. {
  16.     int index;

  17.     int func1()
  18.     {
  19.         return 0;
  20.     }

  21.     int func2()
  22.     {
  23.         return 0;
  24.     }
  25. };

  26. class D
  27. {
  28.     int index;

  29.     virtual int func1()
  30.     {
  31.         return 0;
  32.     }
  33. };

  34. int main()
  35. {
  36.     int len = sizeof(A);
  37.     printf("A len is %d\n", len);
  38.     len = sizeof(B);
  39.     printf("B len is %d\n", len);
  40.     len = sizeof(C);
  41.     printf("C len is %d\n", len);
  42.     len = sizeof(D);
  43.     printf("D len is %d\n", len);

  44.     return 0;
  45. }
复制代码
输出
  1. A len is 1
  2. B len is 4
  3. C len is 4
  4. D len is 16
复制代码
前三个好理解,怎么D的长度是16呢?不应该是8吗?请高手指点!

作者: rain_fish   发布时间: 2010-07-21

哦,我的机器是64位的,难道是8字节对齐?否则也应该是4+8=12啊

作者: rain_fish   发布时间: 2010-07-21

LZ是不是64位的环境呀,我这里是8

作者: hellioncu   发布时间: 2010-07-21



QUOTE:
LZ是不是64位的环境呀,我这里是8
hellioncu 发表于 2010-07-21 11:19




    恩,非常感谢,确认了一下,是字节对齐的问题,字节对齐是按变量占最长字节的为基准,所以D是8字节对齐,为16.
如果
  1. class B
  2. {
  3.     int index;
  4.     int index1;
  5.     char ch;
  6. };
复制代码
则B为4+4+1+3=12

作者: rain_fish   发布时间: 2010-07-21

B以int4字节为基准是4字节对齐,所以是12

作者: rain_fish   发布时间: 2010-07-21

为什么有了虚函数关键字,sizeof值就变大了呢

作者: shaoxia   发布时间: 2010-07-21



QUOTE:
为什么有了虚函数关键字,sizeof值就变大了呢
shaoxia 发表于 2010-07-21 11:40




    多了虚函数表指针

作者: hellioncu   发布时间: 2010-07-21