(空类中 定义成员变量 类(实例化的对象)整体占 一个字节,
成员变量不在实例化对象的内存中,但是要有地址
空类中定义 virtual成员变量 类整体占4个字节)
每实例化创建同一个类的对象,都需要为这个对象分配一块内存。这些对象所占用的内存是各自独立的。
但是对于类的成员函数来说,它可以被一个类的多个对象实例共享使用。
成员函数的代码只存储一份,它们被存储在程序的代码段中,并且在每个对象实例中共享。当调用成员函数时,实际上是通过对象的指针或引用来访问这个函数。因此,并不会在每个对象实例的内存中复制一份成员函数的拷贝,而是共享同一份代码。
+-----------------+
| Object 1 |
| Member Data |
| |
+-----------------+
| Object 2 |
| Member Data |
| |
+-----------------+
| Object 3 |
| Member Data |
| |
+-----------------+
| Shared |
| Member Function|
| (code segment)|
+-----------------+
//file1.h
class File1{
public:
static int x;
};
//file1.cpp
int File1::x = 1;
//file2.h
class File2{
public:
static int x;
};
//file2.cpp
int File2::x = 2;
//file3.h
class File3{
public:
static int x;
};
//file3.cpp
int File3::x = 3;
File1::x = 10; //访问file1.h中的x
File2::x = 20; //访问file2.h中的x
File3::x = 30; //访问file3.h中的x
进程内存空间
+------------+
| 代码段 |
+------------+
+------------+
| 堆区 |
+------------+
+------------+
| 栈区 |
+------------+
+------------+
| 数据段 |
+------------+
数据段
|
|--- File1类静态变量
| |--- x
|
|--- File2类静态变量
| |--- x
|
|--- File3类静态变量
|--- x