远风工作室
C++博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:92 文章:0 评论:72 引用:0
类的特殊大小情况
现对某些特殊情况的类的大小做总结:
1.空类
2.带有虚函数的类
3.继承父类的子类
4.带有static成员的类
5.普通类
class
A
{
}
;
//
结果:sizeof(A)=1
//
原因:空类并不是什么都没有,而是隐含插入了一个字节作为地址偏移量。如果空类长度为0,那创建n个类实例时会出现这些实例都在同一位置的问题。
class
A
{
int
num;
virtual
void
func()
=
0
;
}
;
//
结果:sizeof(A)=8
//
原因:如果类中有纯虚函数或者虚函数,那么有一个指向虚函数的指针,该指针大小为4个字节。
class
A
{
}
;
class
B :
public
A
{
//
添加
}
;
//
结果:“添加”处没有任何语句,sizeof(B)=1;添加int a,sizeof(B)=4。
//
原因:和非继承的情况一样。
class
A
{
}
;
class
B
{
}
;
class
C :
public
B,
public
A
{
//
添加
}
;
//
结果:“添加”处中不加任何语句,sizeof(C)=1;添加int a,sizeof(C)=18;添加char a,sizeof(C)=12;添加short,sizeof(C)=14。
//
原因:不添加任何语句的那1个字节是偏移量,而添加其他变量后因为对齐的原因(和结构体相同),所以出现这种结果。
class
A
{
int
b;
static
int
a;
}
;
//
结果:sizeof(A)=4
//
原因:类的静态数据成员放在全局静态存储区中,不影响类的大小。而类的非静态数据成员只有被实例化的时候,他们才存在。
class
A
{
A()
{}
;
~
A()
{}
;
int
Func()
{}
;
int
a;
}
;
//
结果:sizeof(A)=4
//
原因:类的大小与它当中的构造函数,析构函数,以及其他的成员函数无关(纯虚函数除外),只与它当中的成员数据有关。
从以上的几个例子不难发现类的大小:
1.为类的非静态成员数据的类型大小之和
2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针)
3.为了优化存取效率,进行的边缘调整
4.与类中的构造函数,析构函数以及其他的成员函数无关
发表于 2009-10-17 19:02
远风
阅读(347)
评论(0)
编辑
收藏
引用
所属分类:
C/C++基础
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
C/C++小结杂烩
32位系统中VC++可识别类型
使用MessageBox进行多线程调试
const在C和C++中的不同
数据存储类型:auto/static/register/extern
string用法总结
类的特殊大小情况
常用Win IDE库函数
C/C++小结杂烩
LIB和DLL的区别与使用
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2009年12月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(93)
ACM(5)
(rss)
C/C++基础(20)
(rss)
Linux编程(16)
(rss)
MFC(7)
(rss)
MySQL(2)
(rss)
OPNET仿真(11)
(rss)
PHP(13)
(rss)
Python(3)
(rss)
STL(4)
(rss)
Web技术(2)
(rss)
Windows管理(3)
(rss)
数据结构 / 算法(7)
(rss)
收藏夹
(2)
C/C++基础(1)
(rss)
数据结构 / 算法(1)
(rss)
搜索
积分与排名
积分 - 328113
排名 - 73
最新评论
1. re: makefile和make规则
可以评论么
--冯智浩
2. re: PHP调用外部程序的方法
大的as打算阿达的
--硕大的
3. re: LIB和DLL的区别与使用
太赞,收藏一下,谢谢
--mymimi1988
4. re: LIB和DLL的区别与使用
好文,好内容;
--wsdxyz
5. re: LIB和DLL的区别与使用
写的非常详细,感谢。
--Forward
6. re: LIB和DLL的区别与使用
非常好,说得很详细,也很明白,学习了!
--xihuwuyu
7. re: LIB和DLL的区别与使用
感觉很好,对于才接触dll的我来说很够用。。
--Chosan
8. re: VC中ListCtrl经验总结【转载】[未登录]
总结的很好啊,转了
--king
9. re: LIB和DLL的区别与使用
就我自己没看太懂吗
--AzzStyle
10. re: LIB和DLL的区别与使用
通俗易懂,呵
--我的
阅读排行榜
1. LIB和DLL的区别与使用(76394)
2. 虚拟机VMware tools安装【转载】(36560)
3. Linux串口编程(24826)
4. tar命令的C参数(18838)
5. 判断素数的算法(11393)
6. VC中ListCtrl经验总结【转载】(11280)
7. PHP调用外部程序的方法(11061)
8. makefile和make规则(9175)
9. C++进阶必读书籍【转载】(8410)
10. insert时出现主键冲突的处理方法【转载】(8199)