just do it

与其苟延残喘,不如纵情燃烧

Static

一个C/C++编译的程序占用的内存包含

  • 栈区:(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区:(heap)一般由程序员分配释放,像malloc(c),new(c++) ,若程序员不释放,程序结束时可能由OS回收 。
  • 全局区:也叫静态区(static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。
  • 程序区:存放函数体的二进制代码。
  • 文字常量区:存放常量字符串。

https://blog.csdn.net/yangle4695/article/details/52153143
https://blog.csdn.net/chenyijun/article/details/81938287

static

1.定义局部变量

(1)在函数中定义静态局部变量,只会初始化一次,之后再调用该函数会跳过这一步。
(2)它始终驻留再全局数据区,直到程序运行结束。但其作用域为局部作用域,也就是说不能在函数体外面使用它(局部变量在栈区,函数结束后立即释放内存;而静态局部变量的生命周期要比局部变量长)

2.静态全局变量

定义在函数体外,用于修饰全局变量,表示该变量只在本文件中可见。也就是不能在别的文件中用extern了(当然用#include是可以的)

3.静态成员函数
  • 静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
  • 非静态成员函数可以任意地访问静态成员函数和静态数据成员;
  • 静态成员函数不能访问非静态成员函数和非静态数据成员;

总之,静态不能访问非静态,但是非静态可以访问静态

另外,类中的静态成员本质上是全局变量/函数。静态数据成员是每个 class 有一份,普通数据成员是每个 instance 有一份,因此静态数据成员也叫做类变量,而普通数据成员也叫做实例变量。

posted @ 2019-06-05 16:45  elong1995  阅读(140)  评论(0编辑  收藏  举报