关于类对象大小的 sizeof 计算问题

sizeof计算大小规则(一看就会) 看了几遍 sizeof 的内容,老是忘记,这里做下笔记,以供复习与参考。 sizeof(a)用来计算a所占字节大小,其中a可以是类型名,也可以是变量,亦或是对象。 1) sizeof (int); //类型 2) sizeof (a); //int a;变量 3) sizeof (a); //class A; A a;对象 需要注意的是,sizeof在32位操作系统和64位操作系统中... 阅读详情

之前看了很多关于类对象大小问题的计算,今天闲着没事就来整理整理,写写自己的看法。

首先,来看看一个只有构造函数和析构函数的空类:

输出结果为:1

      因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。 而析构函数,跟构造函数这些成员函数,是跟sizeof无关的,也不难理解因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小。

     如果给这个类添加成员变量,最后输出的大小就是这些成员变量的大小之和(这里涉及到一个成员对齐问题,不再叙述了)。

接下来再来看一个有继承的例子:

sizeof计算类的长度 今天看程序员面试宝典, 阅读详情

相关推荐

【C++】使用sizeof计算类对象所占空间大小-sizeof总结

 决定C ++中对象大小的因素: 1.所有非静态数据成员的大小 2.数据成员的顺序 3.字节对齐或字节填充 4.其直接基类的大小虚函数的存在 5.  正在使用的编译器 6.继承模式(虚拟继承)   一、使用sizeof计算类对象所占空间大小   需要注意,对类做sizeof运算时,并不是简单地把各个成员所占的内存数量相加。需要注意成员顺序不同,可能需要字节补齐。 ...

渲染引擎开发 8573

类的sizeof

1、空类的sizeof是1。空类是指没有成员的类,类中的函数不占空间,除非是虚函数。 如: class A         {              public:                       A(){}                      ~A(){}                      void fun(){}

华秋实的专栏 569

影响class大小的因素 为什么静态函数不占用class大小 类的成员函数 this指针

文章目录1.类的大小与什么有关系?2.空类3.一般类的大小(注意内存对齐)4.含虚函数的单一继承5 含虚函数的多重继承6. 菱形继承的问题及解决方案:虚拟继承 1.类的大小与什么有关系? 与类大小有关的因素:普通成员变量,虚函数,继承(单一继承,多重继承,重复继承,虚拟继承) 与类大小无关的因素:静态成员变量,静态成员函数及普通成员函数 2.空类 空类即什么都没有的类,按上面的说法,照理说大小应该是0,但是,空类的大小为1,因为空类可以实例化,实例化必然在内存中占有一个位置,因此,编译器为其优化为一

lardoris928的博客 928

类对象大小sizeof 计算问题

转载自:http://blog.csdn.net/heipiaibenben/article/details/7870800 一、类对象大小sizeof 计算问题 . 首先,来看看一个只有构造函数和析构函数的空类: [cpp] view plaincopy #include    using namespace std;   clas

dhjsdjd的专栏 679

关于类对象大小sizeof 计算问题(续)

上一篇文章关于这个计算说到了虚继承,后来想象,C++里面还有一个重要的多重继承还没有提到,下面就接着上一篇来说说多重继承,先看一个例子:#include using namespace std; class A{ private: int m_aa;public: A() { cout << "A::A()" << endl; } ~A(

iT2afL0rd's Blog 1416

08-15 关于类对象大小sizeof 计算问题 .

一、类对象大小sizeof 计算问题 . 首先,来看看一个只有构造函数和析构函数的空类: #include using namespace std; class Base { public: Base(); ~Base(); }; int main(int argc, char *argv[]) { cout << sizeof(Base) << endl; }

heipiaibenben的专栏 704

char 类型的移植问题与C++类对象sizeof()大小计算

1.在C语言中char型占一个字节的存储空间,一个字节是8个bit。如果这8个bit按无符号整数,取值范围是0~255,如果按有符号整数,取值范围是-128~127。C语言规定了signed和unsigned两个关键字,unsigned char型表示无符号数,signed char型表示有符号数。 因此这里的主要问题是,如果使用不带signed或unsigned关键字的char型究竟是无符号数

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 607

sizeof() 类大小,空类大小

一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象大小大于等于所有

liu_qiqi的专栏 2万+

C++类对象模型

类对象模型是一种编程概念,用于描述和实现面向对象编程(OOP)中的类和对象。在这个模型中,类定义了对象的结构和行为,包括数据成员(属性)和成员函数(方法)。对象是类的实例,具有类的所有属性和方法。类对象模型支持封装、继承和多态等OOP特性,使得代码更加模块化、可重用和易于维护。通过类对象模型,程序员可以创建复杂的软件系统,提高开发效率和代码质量。类对象的存储方式是按照只保存成员变量,成员函数存放在公共的代码段一个类的大小,实际就是该类中”成员变量”之和,须要注意内存对齐。

qq_74013365的博客 1663

C++类对象大小计算

(一)常规类大小计算 C++类对象计算需要考虑很多东西,如成员变量大小,内存对齐,是否有虚函数,是否有虚继承等。接下来,我将对此举例说明。 以下内存测试环境为Win7+VS2012,操作系统为32位 一、完全空类 [cpp]view plaincopy #include<iostream> usingnamespace...

daru9708的博客 481

sizeof计算对象所占内存的大小详解

首先声明sizeof并非为一个函数,而是C语言中的一个关键字, sizeof计算对象所占内存的大小,判断操作数的类型长度,以字节为单位;地址  的大小在32位系统占4个字节,在64位系统占8个字节,本实例都在32位机器上操作;数组名arr表示整个数组两种情况:sizeof(arr)以及 &amp;arr。 定义一个整型数组的情况 #include &lt;stdio.h&gt; int mai...

Unknown 2196

C++类中包含stl容器时,使用sizeof大小问题

这里的大小指的是sizeof(a class object)的值,也就是一个类的对象所占的字节大小,原来我一直认为类的大小会随着类成员中容器元素个数的变化而变化,后来想想又想不通,所以写了下面的代码用来测试……

AlbertS Home of Technology 8073

类的大小 (sizeof(类对象))的计算方法

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能. 首先:我们要知道什么是类的实例化,所谓类的实例化就是在内

@奮 鬥@的专栏 1994
上一篇: [转载] 给 C++ 程序员的50个忠告
下一篇: 关于类对象大小的 sizeof 计算问题(续)
lambert_s
博客等级 码龄17年 31粉丝 16原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值