`

类大小sizeof(class)

 
阅读更多

class如同int等内建类型一样,分配有一定大小的内存,本文通过基本类、含有虚函数的类、单继承的派生类和多重继承的派生类来考察类的内存布局规律。

1、普通类对象的大小

sizeof(struct C000)本应该是0,但有一个占位符;

普通成员函数,静态成员函数,及静态成员变量皆不会在类的对象中有所表示。其中普通成员函数是在编译期通过this指针与类关联的,静态成员函数和静态成员变量相当于全局变量,只不过比其多一个类名称的限定。

2、普通派生类对象的大小

可以理解为全盘继承下来,而不用管是否重名以及继承方式,两个父类有重名的成员,则在向上调用父类成员时就会产生向上二义性。

3、带虚函数类对象的大小

带虚函数的类不同于普通类的是有一个虚函数表指针,也就是一个指针数组,而sizeof(*)为4.单继承派生类与基类共用一个虚函数表,但表的条目可能不一样,可能派生类虚函数表的条目多一些,或者是进行了改写。

4、带虚函数多重派生类对象大小

含虚函数类多继承派生类拥有多个虚函数表,派生类可以重写各个基类的虚函数,从而修改了虚函数表,也可以添加虚函数,这个添加的虚函数指针条目将添加到第一个虚函数表中。

created by braveyly

2010-05-01 22:26:09

参考资料:C++对象布局及多态实现的探索(一)(二)(三)

http://www.devxx.com/2009/06/138.html

分享到:
评论

相关推荐

    C++类的sizeof1

    总之,`sizeof`运算符在处理C++类时需要考虑类的成员大小、虚函数的存在以及继承关系等因素。理解这些细节对于优化内存使用和编写高效代码至关重要。在实际编程中,应时刻注意类的大小,特别是当内存管理成为一个...

    sizeof 计算出实例的大小

    1. **Class对象和Field对象**:首先,我们需要获取类的`Class`对象,可以通过`Class.forName()`或者`instance.getClass()`来实现。然后,通过`getDeclaredFields()`方法获取类的所有声明的字段。 2. **字段类型和...

    枚举大小sizeof中枚举的大小详解.pdf

    【枚举大小sizeof中枚举的大小详解】 在编程语言中,枚举(Enumeration)是一种用户自定义的数据类型,用于创建一组命名的整数值集合,通常用来表示有限的、有特定意义的常量。枚举在C++中分为两类:枚举类型(enum...

    C++面试-sizeof

    ### C++中的`sizeof`运算符与类大小 在C++编程语言中,`sizeof`运算符被广泛用于获取变量、类型或数据结构所占用的内存空间大小(以字节为单位)。对于基本数据类型来说,`sizeof`的计算相对简单直观;然而,当涉及...

    枚举大小sizeof 中枚举的大小详解.pdf

    【枚举大小`sizeof`详解】 枚举(`enum`)是C++中用于定义一组命名的整型常量的数据类型。它允许程序员为整数值赋予有意义的名称,以提高代码可读性和可维护性。在C++中,枚举分为两类:标准枚举(`enum`)和枚举类...

    枚举大小sizeof中枚举的大小详解.docx

    强类型枚举的大小是由枚举值的类型决定的,如`enum class Color : uint8_t {Red, Green, Blue}`,这里的Color占用的空间就是uint8_t的大小,即1字节。 3. **枚举的边界约束**: - 尽管枚举提供了一种创建有限集合...

    深入理解Sizeof

    6. **数组大小的确定性**:大部分编译器在编译阶段就能确定 `sizeof` 的结果,这是 `sizeof` 可以用来定义数组大小的原因之一。 7. **运行时计算**:与之相反,`strlen` 的结果需要在运行时通过遍历字符串直到遇到...

    C++中类的内存空间大小(sizeof)分析

    在C++编程中,了解类的内存空间大小是非常重要的,特别是涉及到性能优化和跨平台开发时。`sizeof`运算符用于获取类型或变量所占据的内存字节数,这对于理解和控制程序的内存消耗至关重要。本篇文章将深入探讨C++中类...

    C++的sizeof学习总结

    同样,虚函数表(vtable)只在有虚函数的类中占用空间,且这个空间通常不包含在`sizeof`的结果中,除非明确地将指针或引用作为类的成员。 7. 编译器扩展: 不同的编译器可能有不同的扩展,影响`sizeof`的行为。...

    C#中sizeof的用法实例分析

    在C#中,sizeof用来计算类型的大小,单位是字节。有这样的一个类: public class MyUglyClass { public char myChar1; public int myInt; public char myChar2; } 在客户端,试图使用sizeof计算该类型的大小。 ...

    SizeOf_0_2_2.zip_java

    例如,可能存在一个名为`SizeOf`的类,其中包含诸如`sizeof()`这样的静态方法,可以直接传入Java对象来获取其大小。 在Java中,对象的大小不仅包括实例变量的大小,还可能包含对齐填充、对象头信息以及可能的引用...

    function sizeof

    在PHP编程语言中,`function sizeof` 是一个非常重要的内置函数,它被用来获取变量、数组或对象所占用的内存空间大小。这个函数是开发者在处理数据存储和性能优化时经常会用到的一个工具。了解并熟练掌握 `sizeof` ...

    C++ sizeof 实例解析

    静态成员不计入类大小,所以它们不影响`sizeof(E)`的结果。类`E`有2个虚函数,所以有一个vtable指针(4字节),加上非静态成员变量`k`(通常4字节,假设是32位整数),总共8字节。 总结来说,`sizeof`操作符在C++中...

    C++11新特性之Class

     新标准中,sizeof可以直接用于获取Class::member的大小,而不用通过Class的实例。 class TestClass { public: int member_i; char member_c; }; cout<<"test sizeof class member: "; cout<<...

    深入分析C++中类的大小

    我们使用sizeof运算符来获取每个类的大小。 运行结果表明,类A的大小为1字节,因为编译器会给空类分配一个字节,以便于实例化后在内存中有一个独一无二的地址。类B的大小为8字节,因为它包含一个整型变量和一个字符...

    sizeof4j:Java 的 sizeof

    class Main { public static void main ( String [] args ) { ConsoleUtil . printJvmDetails(); out . println( " \n\n SizeOf " ); out . println( " ================================= " ); out . println...

    字符数组和字符串的sizeof( )和strlen().docx

    此外,对于类(如示例中的`class X`),内存对齐会导致结构体的总大小可能大于成员的总字节数。这是因为编译器为了提高效率,会按照特定规则对齐数据成员。在空类中,虽然没有数据成员,但编译器通常会为每个类分配...

    字符数组和字符串的sizeof( )和strlen().pdf

    sizeof()是一个运算符,它返回操作数的大小,以字节为单位。它可以用于获取数组或字符串的长度。 (1) 对于整型字符型数组 int A[]={1,4,5,2,8,6,0}; int i=sizeof(A); //i 表示整型数组 A 所占的总空间的字节数 ...

    C++与操作系统等面试题20

    以下是一组关于C++类大小计算的题目,这些题目主要涉及C++中的一些特殊规则和概念,如空类优化、虚函数表、静态成员变量等。 ##### 题目1:空类 **类定义**: ```cpp class A{}; ``` **sizeof(A) = 1;** **解析...

Global site tag (gtag.js) - Google Analytics