时间:2021-05-19
我们都直到char大小为1,int为4,那么C++中对象的大小是多少呢?
看一段代码:
可以看出,类的大小即为类的属性a的大小为4,函数并不占对象的大小。
那么这个的原因是什么呢?
原因:
这样定义的好处就是为了节省空间的大小。
假设此时类中有10个函数,类又定义了100个对象。如果每个对象都包含一个函数的大小,那么就需要占用1000个函数空间的位置,这样极大的消耗了资源。
实际上类的函数是放在代码区的,哪个对象需要调用函数,则从代码区调用,因为函数并不是对象独有属性,所以并不冲突,这样仅仅占10个函数空间位置就够了。
这样一对比,函数放在代码区节省了很多的资源,因此函数并不占用对象的大小。
至于对象放的位置,如果new的就在堆区,不然就在栈区。
看代码:
我们会发现,空类的大小变成了1,正常不应该是0吗?
这样设置的原因是因为每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小
看图片:
对比上面两种情况,空类大小为1,但是函数又不占用空间,为什么函数变为虚函数却变成了4呢?
因为当有虚函数时,编译器会给这个类加上虚函数指针 vptr(32位是4,64位是8)
此时类中有了指针,因此对象的大小就变为了4。
上面就是类中不同情况的大小。
到此这篇关于你真的知道C++对象大小的文章就介绍到这了,更多相关C++对象大小内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。C和C++的区别C语言是面向过程的语言,而C++是面向对象的过程。什么是面向对象和面向过程?
这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。C和C++的区别C语言是面向过程的语言,而C++是面向对象的过程。什么是面向对象和面向过程?
C++常量表达式常量值是指不会更改的值。C++提供了两个关键字,它们使你能够表达不打算修改对象的意图,还可让你实现该意图。C++需要常量表达式(计算结果为常量的
我们都知道C++中有三种创建对象的方法,如下:复制代码代码如下:#includeusingnamespacestd;classA{private:intn;pu
前言c++分为编译时多态和运行时多态。运行时多态依赖于虚函数,大部分人或许听说过虚函数是由虚函数表+虚函数指针实现的,但,真的是这样吗?虽然c++规范有着复杂的