1.概述
C++中用static修饰变量或者函数。
在全局静态存储区存储,程序执行完后释放。
C++内存分区:
a.堆
存储内容:程序员手动指定内容
内存管理方式:应用程序new指令分配内存空间,delete释放,如果没有delete,那么当程序结束后,操作系统自己回收
优缺点:效率高但是分配内存小。
b.栈
存储内容:执行函数时,函数局部变量在栈上存储
内存管理方式:内存分配运算内置于处理器的指令集中,函数执行完后释放。
优缺点:效率高但是分配内存小。
c.自由存储区
存储内容:程序员手动指定内容
内存管理方式:应用程序malloc指令分配内存空间,free释放,如果没有free,那么当程序结束后,操作系统自己回收
d.全局/静态存储区
全局变量和静态变量被分配到同一块内存中
e.常量存储区
这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
2.静态变量
2.1静态局部变量
如在函数中生命的静态局部变量,只能初始化一次,直到程序运行结束后才会释放
int func() {
static int a=1;
a++;
cout<<a<<endl;
return 0;
}
void main() {
for (int i=1; i<=5; i++) {
func();
}
}
输出2,3,4,5,6
2.2静态全局变量
static关键字修饰的全局变量具有以下特点:
只能初始化一次,程序运行结束后才会释放
只能在此文件下调用,其他文件不能调用
//a.cpp
static int a=10;
//b.cpp
extern int a;
cout<<a;//报错
//a.cpp
static int a=10;
//b.cpp
extern int a;
cout<<a;//报错
3 自定义类中的静态成员
被 static 修饰的变量、被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的
在 C++ 中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
static修饰的自定义类变量具有以下特点:
所有类对象共用此类变量,一个变,所有变
可以通过 类名::成员名 直接引用此变量,不需要创建类实例
class example {
public:
static inta;//声明静态变量a
};
int example::a=10;//变量a的初始化,不能在main()中进行初始化不知道原因
void main() {
cout<<example::a<<endl;
example ex1, ex2;
ex1.a=9;
ex2.a=8;
cout<<ex1.a;
system("pause");
}
输出10 8;