`
eriol
  • 浏览: 400477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

计算类所占的字节数

    博客分类:
  • C++
阅读更多

类的大小只包括那些成员变量的大小,成员函数不计算在内。


成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录的各个成员函数的地址(当然不同的编译可能略有不同的实现)。所以我们访问成员函数是间接获得地址的。所以这样也就增加了一定的时间开销,这也就是为什么我们提倡把一些简短的,调用频率高的函数声明为inline形式。   



Example 1: 

class CBase 
{ 
}; 

    结果:sizeof(CBase)=1。


为什么空的什么都没有的类的大小是1呢?

c++要求每个实例在内存中都有独一无二的地址。

空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。



Example 2:

class CBase 
{ 
    int a; 
    char p; 
};

    结果:sizeof(CBase) = 8;

 

记得对齐的问题。int 占4字节,char占一字节,补齐3字节

 

 

Example 3:

class CBase 
{ 
    public: 
        CBase(void); 
        virtual ~CBase(void); 
    private: 
        int   a; 
        char *p; 
}; 

     结果:sizeof(CBase) = 12;

 

C++ 类中有虚函数的时候有一个指向虚函数的指针(vptr),在32位系统分配指针大小为4字节。无论多少个虚函数,只有这一个指针,4字节。


 

Example 4:

class CChild : public CBase 
{ 
    public: 
        CChild(void); 
        ~CChild(void); 
        virtual void test();
   private: 
        int b; 
}; 

 

    结果:sizeof(CChild) = 16 ;

 

可见子类的大小是本身成员变量的大小加上父类的大小。

父类子类共享一个虚函数指针。

 

 

 

分享到:
评论

相关推荐

    计算一个Java对象占用字节数的方法

    主要介绍了计算一个Java对象占用字节数的方法,较为详细的分析了Java中各类对象所占用的字节数,需要的朋友可以参考下

    【转】C语言常见类型占用字节数

    最近笔试经常遇到c语言各类型变量所占字节数的问题,这里做一个总结好了。

    利用JS如何计算字符串所占字节数示例代码

    本文主要给大家介绍了关于JS计算字符串所占字节数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 示例代码 /** * 计算字符串所占的内存字节数,默认使用UTF-8的编码方式计算,也...

    Javascript 计算字符串在localStorage中所占字节数

    本文给大家分享的是使用Javascript 计算字符串在localStorage中所占字节数,分别对UTF-8和UTF-16两种编码进行了详细说明,有需要的小伙伴可以参考下。

    编译器数据对齐方式(结构体、类所占空间的计算)

    鄙人总结,出错请指出,谢谢 编译器数据对齐方式(结构体、类所占空间的计算) 编译器数据对齐方式(结构体、类所占空间的计算)

    多媒体计算公式.doc

    存储量=帧图像文件存储量×帧频×播放时间(单位:字节B) 未经压缩的Wave声音文件所占的存储容量计算公式 存储量=采样频率(Hz)×量化位数×声道数×时间/8(单位:字节B) 存储量换算: 1B=8bit(位) 1kb=...

    js计算字符串长度

    js计算字符串长度,可以输入中文、英文、数字、中英文数字混合等,最后计算结果为字符串所占字节个数

    Java 对象(数组)占多大空间(几个字节) 手把手做实验

    废话不多说,一起开干 1 前置知识 本次实验基于jdk8 64位以及以上版本。本机环境为jdk11 先查看一下jvm启动的默认参数,里面有2个参数值对本次实验会造成影响。 命令行: java -XX:+PrintCommandLineFlags -version ...

    【1104】图像压缩(含输出结果及计算过程).cpp

    给定像素序列,求出最优分段及所占字节数。 输出s[0],s[1],s[2].......及l[1],l[2],l[3].......的计算过程,并给出最终解。 例如实例1最后输出: 最优分段是:,12,15>,,,2> 总存储位数为:57 给定实例1:P=,12,...

    《认识数据与大数据》试题.docx

    在计算机中使用GBK编码,一个汉字占两个字节的存储空间,一千个汉字需要多大的存储空间()。 [单选题] * 约1KB 约2KB(正确答案) 约1MB 约2MB 2. ()不是将模拟音频数字化需要经过的步骤。 [单选题] * 采样 量化 ...

    历年全国计算机考试c语言试卷及答案

    (5) 在64位计算机中,一个字长所占的字节数为 A) 64 B) 8 C) 4 D) 1 (6) 在Windows环境下,当一个应用程序窗口被最小化后,该应用程序 A) 继续在后台运行 B) 继续在前台运行C) 终止运行 D) 暂停运行...

    PHP获取中英混合字符串长度的方法

     // 输出12然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个...

    关于字符常量

    sizeof 运算符是用来测算某个值或者某个类型的数据所需占用的内存字节数的。 sizeof(int) 可以测得 int 类型的数据占用内存的字节数,结果为 4 sizeof(3 + 4) 可以测得表达式 3 + 4 的值占用内存的字节数 显然 3 +...

    头歌C语言2023答案-指针

    本关任务:编写程序通过指针变量间接访问整型变量。 本关任务:编写程序交换两个指针变量的值。 本关任务:编写程序,利用指针方法求数组的最大值和最小值。...本关任务:编程计算不同类型的指针变量所占内存的字节数。

    oracle求字符串长度函数length()和hengthb()简介

    lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 对于单字节字符,LENGTHB和LENGTH是一样的. 如可以用length(...

    [详细完整版]计算机.doc

    24×24点阵的汉字,其字形码占72个字节。 现代信息技术的发展趋势:数字化、多媒体化、网络化和智能化。 物质、能源和信息是人类社会赖以生存、发展的三大重要资源。 根据计算机的性能、规模和处理能力,可将计算机...

    个人整理sizeof()用法汇总

    而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4...

    VC 统计字符串中英文字符个数.rar

     //计算中文字符数,每个中文字符占两个字节  nCLenth = (Lenth-nELenth)/2;    nTotalLenth = nCLenth nELenth;  m_strTotal.Format("总共字符数:%d",nTotalLenth);  m_strEnglish.Format("英文字符数:%d",...

    全国计算机等级考试系列 (二级)-C 语言题库

    存储容量是以字节为单位的,ASCII字符占2个字节,中文字符占4个字节,盘中文件占的字节不确定,子目录占的字节不确定。1.44MB合140万个ASCII字符。 5.B。一个24×24点阵汉字字型信息占用72个字节,800个所需要的...

Global site tag (gtag.js) - Google Analytics