游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1784|回复: 3

【求助】C++的类大小问题

[复制链接]

9

主题

26

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2012-12-29 18:25:51 | 显示全部楼层 |阅读模式
被这个问题困扰很久了,我直接定义一个类,这个类只有3个float成员,大小是12,然后我又定义了一个类,也只有3个float成员,但是包含了很多函数、静态函数和静态成员,结果类的大小变成了16,这个16对我的程序来说太危险了,我知道有内存对齐的因素在里面,但我不知道同样只有3个float成员的类怎么大小不一样,静态成员应该不会算在类大大小里面啊。

9

主题

26

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2012-12-30 11:28:41 | 显示全部楼层
额,虽然没有回答,但我自己解决了,也给别人提个醒,如果除了内存对齐外,如果雷轰包含至少一个虚函数,那么类的结构里编译器会自动添加一个void指针指向虚函数表地址,所以类的大小会多4字节。如果没有注意到这点获得的类大小又十分重要(比如步长)就会出现严重的问题,我可是被坑惨了的。。

11

主题

95

帖子

658

积分

高级会员

Rank: 4

积分
658
发表于 2012-12-30 20:25:10 | 显示全部楼层
给你个扩展的知识,假如是多重继承,而且不同基类也有虚函数,那么虚表可能不止一个而且还包括一个父类偏移。这时大小更是不好理解。《C++反汇编解密》把继承给点透了!

9

主题

26

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2013-1-5 00:14:47 | 显示全部楼层
额,多重继承可能会有多个虚函数表这个还是可以理解的,不过还是谢谢提醒了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-27 05:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表