用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。
显然,这样做会大大节约存储空间。C++编译系统正是这样做的,因此每个对象所占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分)所占用的存储空间,而不包括函数代码所占用的存储空间。
C++程序的内存存储通常分为五个区:
一般分为5个区,编译链接之前的内存分配就是静态内存,程序运行之后的内存分配就是动态内存。
- 全局数据区(data area):存放全局变量,静态数据
- 字符串常量区:
- 代码区(code area):存放所有类成员函数和非成员函数
- 栈区(stack area):放在局部变量、函数参数、返回数据、返回地址等
- 堆区(heap area)(即自由存储区):一般由程序员分配释放malloc/new,free/delete,若程序员不释放,程序结束时由系统释放。
根据这个解释,我们可以得知在类的定义时,类成员函数是被放在代码区<