全局变量与局部变量

程序的内存区域

一个程序将操作系统分配给其运行的内存块分为4个区域:

(1)代码区,存放程序的代码,即程序中的各个函数代码块。

(2)全局数据区,存放程序的全局数据和静态数据。

(3)堆区,存放程序的动态数据。

(4)栈区,存放程序的局部数据,即各个函数中的数据。

在全局变量定义之前定义的所有函数都不会知道该变量。

函数中的局部变量存放在栈区,在函数开始运行时,局部变量在栈区被分配空间,函数退出时,局部变量随之消失。局部变量没有默认初始化。如果局部变量不被显示初始化,那么其内容是不可预料的。

函数调用机制

函数调用时C++首先:

(1)建立被调函数的栈空间。

(2)保护调用函数的运行状态和返回地址。

(3)传递参数。

(4)将控制转交被调函数。

发生函数调用时,被调函数中保护了调用函数的运行环境和返回地址。使得调用函数的状态可以在被调函数运行返回后完全恢复,而且该状态与被调函数无关。

被调函数运行的栈空间独立于调用函数的栈空间。

 

void funcA(int,int);
void funcB(int);

int main()
{
     int a = 6, b = 12;
     funcA(a,b);
}

void funcA(int aa,int bb)
{
      int n = 5;
      funcB(n);     
}

void funcB(int s)
{
       int x;
       //……
}

                                                                                                                              栈区

 

x

 

s

 

 

funcB()

 
 
5
返回地址
调用函数运行状态

n

bb

aa

 

funcA()

5
12
6
返回地址
调用函数运行状态

b

a

 

 

  main()

12
6
参数
返回地址
操作系统运行状态

 

可见性

标识符的可见性范围不超过作用域,作用域则包含可见范围。

在内层作用域中,外层作用域中声明的同名标识符是不可见的。

 

posted @ 2017-04-10 21:12  手可摘星晨  阅读(154)  评论(0)    收藏  举报