函数,变量及存储方案

8月 30th, 2012
Visited 4576 times, 1 so far today
0

Comments

                我们知道变量分为两种类型,一种是自动变量另一种是静态变量,自动变量存储在相应在栈 中,创建和销毁与程序的控制权和作用域相关,控制权进入相应作用域则编译器创建并维护变量在相应的栈(一种先进后出的结构)中,出了作用域则自动销毁。也 就是说其生命周期由程序的执行状态控制。而静态变量,即是存储在编译器分配的固定的内存中(不在栈中),其生命周期在整个程序运行中一直存在。而这样的内 存我们也称为静态内存块。

         那么函数的存储类型又是怎么样的呢?其实函数与变量很相似,函数存储的地址与静态变量在同一个地方(静态内存块中)。即函数在整个程序运行期间都存在。生 命周期为整个程序。函数与变量一样也具有外部全局函数与内部全局函数。外部全局函数就是函数在一个文件中定义,其它文件中可以直接访问(类似与外部全局变 量,此时的extern关键字在相应的函数引用中可以省略,此处不像外部全局 变量一样,外部全局变量一定要用关键字extern来声明相应的引用,才能在其它源文件(.cpp)中使用)。那可能有人要问了,如果想要在单个文件中访 问,其它文件中不能访问,那该怎么办呢,有办法吗?其实很简单,只需要在相应的函数原型及定义中加上static关键字就可以了。与变量一样。加上 static后,这个函数只能在当前文件中使用。但如果这个文件外其它文件具有相同的外部全局函数定义时,则会隐藏外部函数,而直接应用内部static 函数(与变量的应用一样,两者采用同样的机制)。

          C++中总结起来,一共存在着有三种类型的存储方案,1.静态存储    2.自动存储   3.动态存储(即new出来的内存,存放在堆中,生命周期由程序员来分配与释放)。