免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3581 | 回复: 6
打印 上一主题 下一主题

关于sizeof(class)中有虚函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-21 11:15 |只看该作者 |倒序浏览
  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吗?请高手指点!

论坛徽章:
0
2 [报告]
发表于 2010-07-21 11:18 |只看该作者
哦,我的机器是64位的,难道是8字节对齐?否则也应该是4+8=12啊

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2010-07-21 11:19 |只看该作者
LZ是不是64位的环境呀,我这里是8

论坛徽章:
0
4 [报告]
发表于 2010-07-21 11:24 |只看该作者
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

论坛徽章:
0
5 [报告]
发表于 2010-07-21 11:25 |只看该作者
B以int4字节为基准是4字节对齐,所以是12

论坛徽章:
0
6 [报告]
发表于 2010-07-21 11:40 |只看该作者
为什么有了虚函数关键字,sizeof值就变大了呢

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2010-07-21 11:53 |只看该作者
为什么有了虚函数关键字,sizeof值就变大了呢
shaoxia 发表于 2010-07-21 11:40



    多了虚函数表指针
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP