C++结构的大小
来源:互联网 发布:概率矩阵分解 视频 编辑:程序博客网 时间:2024/06/18 12:20
我们在使用任何一门编程语言时,都离不开基本数据类型,即使该语言的数据类型是弱类型的,当我们在面向对象编程的时候,类的大小与类中属性的声明有什么关系呢?现在我们就一起探讨一下。
下面我们看下面一段代码:
该代码段用于测试C++中的基本数据类型的大小,首先声明一下,我们测试机是ubuntu12.04,32位系统,编译器为gcc4.7.2.代码后面的注释即为显示的结果。由此我们可以得出基本类型的大小。那么由此我们引申到结构中,请看下面几行代码:
那么这是什么原因呢?
首先,我们看第一个结构person:
特点:内部什么属性都没有
大小:1B
由此可以看出,什么属性都没有的结构,其默认的大小为1B,即8位
结构:student
特点:只有一个属性a,其类型为char类型,单独的char类型的大小为1B
大小:1B
结构:police
特点:只有一个属性s,其类型为short,单独的short类型的大小为2B
大小:2B
结构:clerk
特点:只有一个属性i,其类型为int,单独的int的大小为4B
大小:4B
由以上三个类与第一个类的比较可以看出,当结构中没有属性的时候,结构的默认大小为1B,一旦有了至少一个属性,则结构的大小是由其中的属性大小决定的。
结构:flower
特点:有一个char类型的属性c和一个short类型的属性s
大小:4B
结构:desk
特点:有一个int类型的属性i和一个char类型的属性c
大小:8B
结构:book
特点:有一个int类型的属性i,一个short类型的属性s和一个char类型的属性c
大小:8B
由此可以看出,由内存对齐的观点可以看出,在一个结构中的对齐模数是基本数据类型最大的值,就像book结构,由三个基本数据类型:int,short,char,其中大小最大的应该为int类型,4B,所以以4B作为模数,进行内存对齐。i放在结构的偏移量的0处,占用4B的空间,在i的结尾处继续添加s,由于s所占的空间小于4B,所以编译器需要看该结构后面是否还有属性,若没有,则自动填充到4B的空间,若有,则继续添加,在该实例中,s后还有c,则在s之后继续添加c,由于c只占1B的空间,所以s和c总的空间才3B,还是没有达到模数,则编译器自动填充空间,到4B的空间,所以,book的大小为8B。
这仅仅是对于一种编译器和一个平台进行的测试,不同的编译器和不同的平台得出的结果是不一样的,但是原理都是一样的,所以弄懂这些东西,对于理解结构的大小和基本数据类型的大小还是比较有用处的。
0 0
- [C/C++]结构体大小的计算方法
- [C++]结构体的大小的计算
- C中结构体大小的计算
- C语言UNION结构大小的问题
- C中含位域结构体大小的计算
- C语言中结构体的大小
- C语言--结构体大小
- C语言结构体大小
- c语言结构体大小
- 关于C中结构体的大小问题(sizeof)
- C语言_空结构体的大小
- C语言中如何计算结构体的大小
- C语言中关于结构体大小的问题
- 面试珠玑 C语言sizeof求结构体的大小
- 【c语言】结构体大小计算的例子
- c语言sizeof求结构体的大小
- 结构的大小
- 结构体的大小
- 直线检测
- Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
- CSS专题(二):元素大小与位置offsetLeft offsetTop offsetWidth offsetHeight clientWidth clientHeight scrollWidth s
- JAVA默认排序算法问题
- Jsp静态包含和动态包含
- C++结构的大小
- 组合模式,Composite
- js中通过 CSS 选择器选取元素
- c3p0配置详解
- 对canvas的translate()方法的理解
- hdu 4526 水DP
- sublime 经验总结 主题有 less2css
- hta文件格式
- 使用oracle官方文档(11G)——初探Concept