zoukankan      html  css  js  c++  java
  • C++对象大小,你真的知道吗?

    此文转载自:https://blog.csdn.net/qq_46423166/article/details/112298182

    我们都直到char大小为1,int为4,那么C++中对象的大小是多少呢?

    看三个问题:

    1. C++中函数占不占对象的大小
    2. 空类的大小是多少?
    3. 如果类中有虚函数,类的大小是多少?

    一,C++中函数占不占对象的大小

    看一段代码:

    可以看出,类的大小即为类的属性a的大小为4,函数并不占对象的大小。

    那么这个的原因是什么呢?

    原因:

    这样定义的好处就是为了节省空间的大小。

    假设此时类中有10个函数,类又定义了100个对象。如果每个对象都包含一个函数的大小,那么就需要占用1000个函数空间的位置,这样极大的消耗了资源。

    实际上类的函数是放在代码区的,哪个对象需要调用函数,则从代码区调用,因为函数并不是对象独有属性,所以并不冲突,这样仅仅占10个函数空间位置就够了。

    这样一对比,函数放在代码区节省了很多的资源,因此函数并不占用对象的大小。

    至于对象放的位置,如果new的就在堆区,不然就在栈区。

    二,空类的大小是多少?

    看代码:

    我们会发现,空类的大小变成了1,正常不应该是0吗?

    这样设置的原因是因为每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小

    三,如果类中有虚函数,类的大小是多少?

    看图片:

    对比上面两种情况,空类大小为1,但是函数又不占用空间,为什么函数变为虚函数却变成了4呢?

    因为当有虚函数时,编译器会给这个类加上虚函数指针 vptr(32位是4,64位是8)

    此时类中有了指针,因此对象的大小就变为了4。

    上面就是类中不同情况的大小。

       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    Java动态规划实现将数组拆分成相等的两部分
    动态规划解决hdu龟兔赛跑
    Eclipse上将maven项目部署到tomcat,本地tomcat下,webapps下,web-inf下lib下没有jar包决绝方案
    【转】spring IOC和AOP的理解
    Eclipse创建一个普通的java web项目
    linux服务器自动备份与删除postgres数据库数据
    开启Linux服务器vnc远程桌面详细步骤
    设计模式---JDK动态代理和CGLIB代理
    菜谱
    网络协议-dubbo协议
  • 原文地址:https://www.cnblogs.com/phyger/p/14251912.html
Copyright © 2011-2022 走看看