类对象里面只有成员变量占用空间,成员函数不占用空间。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类对象里面只有成员变量占用空间,成员函数不占用空间。相关的知识,希望对你有一定的参考价值。

参考技术A 这个不是靠记的,而是靠理解的。就你的提问,可以这样理解:
变量是什么?就是内存中的一块空间,可以放任何数字或字符在这个空间里(这和变量的定义有关,例如:字符型、整型等)。
函数是什么?是实现一个特定功能的一段代码,这段代码是直接运行的(CPU=运算器+控制器)。如果这段代码用到变量,那么显然需要分配空间(这是变量分配空间);如果这段代码没有用到变量,那么实际上是不需要分配空间。
因此,就泛意义上来说,成员函数是不占用空间的,占用空间的只是变量。
-----------------------------------
从另一个角度来看,如果成员函数占用空间,那么所有代码都占用空间,这显然是伪命题(要理解为何是伪命题,具体请看OS体系结构)。

C++静态成员变量在内存中的存储方式

        如果只声明了类而未定义对象,则类的一般成员变量是不占用内存空间的,只有在定义对象的时候,才为对象的成员变量分配空间。但是,静态成员变量不属于某一个对象,在为对象分配空间中,不包括静态成员变量所占的空间。程序测试例子例如:

       程序运行结果如下:

g++ test.cpp -o exe

wkf@ubuntu:~/c++$ ./exe

len = 32

       可以看到student类对象的大小就是 char addr[32] 成员变量所占用的 32个字节空间,对于 number 这个static 类型的数据,不占用对象的内存空间。

静态成员变量是在所有对象之外单独开辟空间,只要在类中定义了静态成员变量,即使不定义对象,也为静态成员变量分配空间,它可以被类对象引用。

       在一个类中可以有一个或多个静态成员变量,所有的对象共享这些静态成员变量,都可以引用它。

       学习C语言时已了解静态变量的概念:如果在一个函数中定义了静态变量,在函数结束时该静态变量并不释放,仍然存在并保留其值。现在讨论的静态成员变量也是类似的,它不随对象的建立而分配空间,也不随对象的撤销而释放(一般成员变量是在对象建立时分配空间,在对象撤销时释放)。静态成员变量是在程序编译时被分配空间的,到程序结束的时候才释放空间。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

以上是关于类对象里面只有成员变量占用空间,成员函数不占用空间。的主要内容,如果未能解决你的问题,请参考以下文章

java中成员函数占用对象的内存空间吗

静态成员变量不占用类的内存空间

C++学习之旅第一站:类

C++静态成员变量在内存中的存储方式

C++静态成员变量在内存中的存储方式

C++中一个class类对象占用多少内字节(7个例子,很清楚)