我们知道变量分为两种类型,一种是自动变量另一种是静态变量,自动变量存储在相应在栈中,创建和销毁与程序的控制权和作用域相关,控制权进入相应作用域则编译器创建并维护变量在相应的栈(一种先进后出的结构)中,出了作用域则自动销毁。也就是说其生命周期由程序的执行状态控制。而静态变量,即是存储在编译器分配的固定的内存中(不在栈中),其生命周期在整个程序运行中一直存在。而这样的内存我们也称为静态内存块。
那么函数的存储类型又是怎么样的呢?其实函数与变量很相似,函数存储的地址与静态变量在同一个地方(静态内存块中)。即函数在整个程序运行期间都存在。生命周期为整个程序。函数与变量一样也具有外部全局函数与内部全局函数。外部全局函数就是函数在一个文件中定义,其它文件中可以直接访问(类似与外部全局变量,此时的extern关键字在相应的函数引用中可以省略,此处不像外部全局变量一样,外部全局变量一定要用关键字extern来声明相应的引用,才能在其它源文件(.cpp)中使用)。那可能有人要问了,如果想要在单个文件中访问,其它文件中不能访问,那该怎么办呢,有办法吗?其实很简单,只需要在相应的函数原型及定义中加上static关键字就可以了。与变量一样。加上static后,这个函数只能在当前文件中使用。但如果这个文件外其它文件具有相同的外部全局函数定义时,则会隐藏外部函数,而直接应用内部static函数(与变量的应用一样,两者采用同样的机制)。
C++中总结起来,一共存在着有三种类型的存储方案,1.静态存储 2.自动存储 3.动态存储(即new出来的内存,存放在堆中,生命周期由程序员来分配与释放)。