`
eriol
  • 浏览: 407795 次
  • 性别: 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对象在堆内存中由四个部分组成:对象头(A)、基本类型域(B)、引用类型域(C)和填充物(D)。 **对象头(A)**: ...

    精彩编程与编程技巧-目录所占的字节数...

    此代码的主要功能是计算指定文件夹(及其子文件)所占用的总字节数。它通过遍历文件夹中的所有文件,并累加每个文件的大小来实现这一目标。下面将详细介绍代码的每一部分及其实现细节。 ### 代码解析 #### 函数...

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

    最后,文件内容还提供了一个简单的示例代码,展示了如何使用sizeof运算符来计算各种类型占用的字节数,并输出了32位和64位系统下各类类型的字节占用结果。这些示例代码对于理解内存占用情况非常有帮助,并且可以作为...

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

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

    qt小工具,输出电脑上各种数据类型的所占字节数、最大值、最小值

    总结起来,"qt小工具,输出电脑上各种数据类型的所占字节数、最大值、最小值"是一款实用的开发辅助工具,它能帮助开发者更好地掌握编程中的数据类型知识,提升编程效率,避免因类型理解不当导致的问题,同时也可以...

    根据字节数截取字符串

    因此,如果我们想要根据字节数截取字符串,我们不能简单地用`substring()`,而是需要先计算字符串的字节数,然后根据这个字节数来定位截取的位置。 下面是一种可能的实现方式: 1. 使用`getBytes()`方法转换字符串...

    js判断字节数

    此函数通过遍历字符串中的每个字符,利用`charCodeAt()`方法获取其Unicode编码值,然后根据编码范围判断其在UTF-8中所占的字节数。 此外,JavaScript的Blob对象也可以用来估算字符串的字节数,但这种方法通常用于大...

    计算字节长度

    4. **内存块字节长度**:在处理内存块时,例如从内存流或缓冲区读取数据,可以使用 `SizeOf` 函数来获取特定类型的数据所占的字节数。例如,如果你有一个 `MyRecord` 记录类型,可以这样计算它的字节长度: ```...

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

    总结来说,这篇文章提供了在Web前端开发中,计算字符串在localStorage中存储时所占字节数的详细方法,这对于开发者来说是一个非常实用的技巧,特别是在处理国际化、本地化内容时,了解字符编码和字节计算可以避免...

    一句话jquery 取中文字节数

    由于中文字符在不同的编码方式下所占的字节数不同,因此计算中文字符的字节数需要考虑其具体的编码格式。例如,在UTF-8编码中,可以使用正则表达式来匹配非ASCII字符,并将其替换为特定的字符串(如题目中的"aa"),...

    Java中文字符所占的字节数

    中文字符在Java中所占用的字节数并不固定,它取决于所采用的字符编码方式。这是因为不同的编码标准有不同的字符表示机制,从而导致了字节数的不同。 首先,ISO8859-1是一种西欧字符编码,它只支持拉丁字母,不包含...

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double

    在Keil MDK-ARM开发环境中,了解不同数据类型的字节数对于编写高效且符合硬件要求的代码至关重要。本文将详细解析标题和描述中提到的各种数据类型在Keil MDK-ARM下的字节数占用情况。 首先,Keil MDK-ARM是一个针对...

    统计字符串字节数统计字符串字节数

    这些示例展示了如何在不同编程语言中计算字符串的字节数,但要注意,对于包含多字节字符(如UTF-8中的非ASCII字符)的字符串,字节数会根据编码方式变化。因此,当你进行数据传输或存储时,了解字符串的编码和字节数...

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

    如果`Person`类有实例字段,那么实例数据部分会增加相应字节数。 2. 关闭压缩参数后的对象内存布局: 如果关闭这两项压缩选项,对象引用将变为64位,即8字节。实验显示`Person`对象占用40字节,这是因为对象头的...

    谈谈51单片机的指令字节数.doc

    2. **立即数**:8位的立即数占一个字节,16位的立即数则占两个字节。例如,在`MOV A, #07H`中,#07H是8位立即数。 3. **操作数地址**:8位操作数地址占一个字节,16位操作数地址占两个字节。如`MOV 07H, #07H`中的...

    C/C++与Java各数据类型所占字节数的详细比较

    本文将详细对比C/C++和Java两种语言中的数据类型及其所占的字节数。 首先,我们来看C/C++的数据类型: 1. 整型: - Turbo C 中的 `int` 和 `short int` 都是2字节(16位),有符号的 `int` 范围是 -32768 到 ...

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

    对于结构体和类所占空间的计算,编译器会根据成员对齐的规则进行计算。具体规则如下: 1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除。编译器在分配内存时,会寻找一个内存地址,使得该地址加上...

    图片透明计算(字节集法).rar

    每个通道占8位(1字节),因此一个像素总共32位(4字节)。字节集法就是对这四个字节进行操作,以调整透明度。 2. **透明计算**:在字节集法中,透明计算通常是通过修改Alpha值来完成的。如果我们要将一个图像的...

Global site tag (gtag.js) - Google Analytics