sizeof计算含有虚函数的类的空间大小

更新时间:2023-05-19 15:10:10 阅读: 评论:0

sizeof计算含有虚函数的类的空间大小
当我们计算一种数据类型所占用的空间大小时,很easy,sizeof就可以解决掉。如果我们计算一个类,一个空类,或者一个含有虚函数然后又派生子类时,这时候他们所占用的内存空间是如何变化的呢?下面我们就通过代码来介绍下。
一个不含有虚函数的普通类与其派生类的内存关系
成考英语试题
class Ba
{
  public:
        Ba(int x):a(x)
        {}
        void print()
        {
        cout<<a<<endl;
        }
private:
        int a;
};
tpo听力原文
class Derived:public Ba
{
public:
        Derived(int x):Ba(x-1),b(x){}
        void print(){};
private:
        int b;
};
此时Ba类和Derived类的内存空间是怎样的呢?
Sizeof(Ba) 和sizeof(Derived)
1. 对于Ba类
Ba类中含有一个整型成员变量,sizeof(int) = 4,print()函数不占用内存。所以Ba类占用的内存空间大小为4字节
2. 对于Derived类
Derived类继承于Ba类,自然的继承了其成员变量a,自身又扩展了自己的成员变量b,因而多了4个字节。所以Derived类所占用的内存空间大小应该为8字节。
一个 含有虚函数 的类与其派生类的内存空间占用关系
低碳生活 英语作文
北京职业培训
class A
bandage
{
public:
红筹股        A(int x):a(x){}
        virtual void print(){cout<<a<<endl;}
private:
        int a;
};
class B:public A
{
public:
        B(int x):A(x-1),b(x){}
        virtual void print(){cout<<b<<endl;}
private:
        int b;
};
此时Ba类和Derived类的内存空间是怎样的呢?
Sizeof(A )和sizeof(B)
1. 对于类A
类A中不仅有一个成员变量还有一个虚函数,因为虚函数需要一个指针去维护这个类的虚函数表,普通函数是不占用内存的。
在32位系统中,一个指针的字节大小是4字节,但是在64位Ubuntu系统中一个指针的大小是8个字节。此段代码是在64位系统下测试的。所以类A所占用的内存大小为4+8 =12?这看起来是很容易的数学题,但是这真的对吗?答案很清晰,这明显是错的!为什么呢?因为这里面有对齐和补齐的因素。12不能满足是8的倍数。所以需要补齐4字节。因此此类的内存空间大小是16字节。如果是32位系统则sizeof(A)=8,64位系统是sizeof(A)=16
2. 儿童谜语大全3到6岁对于类B
类B中继承了A的成员变量,自身也扩展了成员变量b,因为 有个虚函数,所以需要虚函数表额指针去维护。4+4+8 = 16字节。(64系统)
32位系统sizeof(B)=4+4+4 =12
工程管理方法64位系统sizeof(B)=4+4+8=16
空类的内存空间
Class A
{
};
Sizeof(A)=1
由于Ashi空类,编译器会安插一个char空类,标记它的每一个对象,因此其大小为1字节。
bypass是什么意思● 更多请前往个人文库
/p/helpylee

本文发布于:2023-05-19 15:10:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/695827.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   占用   内存空间   字节   成员   需要   指针
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图