一个程序咋爱内存占用的存储空间可以分为:

程序区:用来存放可执行程序的程序代码的。

静态存储区:静态变量,在程序开始执行时分配,在执行过程中是固定的,程序执行完后释放空间。

动态存储区:动态变量和形参以及函数调用时的现场保护程序和返回地址等。

 

auto变量(动态变量):C++编译器默认局部变量为自动变量。不需要auto关键字说明。若没有明确赋值,其初值是不确定的。

int fun(int n){

       auto int a;

       int b = 20;

}

 

static变量:静态变量

static int x;//静态全局变量

int fun(int n){

       static int a;//静态局部变量,仍保留上一次函数调用结束时的值

       int b = 20;

}

静态局部变量,仍保留上一次函数调用结束时的值,仍使用原来分配的存储空间;

只赋值一次,使用上次结束时的值;若没有初始赋值,字符型为‘\0’,数值为0

静态局部变量在函数调用结束时虽然仍存在,但是由于作用域限制,其他函数不能引用。

 

静态全局变量,默认初值总是为0;仅限于该定义的源文件使用。

 

register 变量:为了提高效率,允许局部变量存放在CPU的寄存器中。

register int i,j;

只有局部auto变量和形参可以作为寄存器变量;

一个计算机系统的寄存器数目有限,不能定义任意多个register变量;

静态局部变量不能定义为register变量;

寄存器变量主要用于控制循环次数和临时变量。(不是必须的)

 

extern 变量:外部变量,一定是全局变量。

1:在同一个源文件中修饰扩展全局变量;(变量类型可以不写)

2:在多文件组成的程序中修饰全局变量。

 

内部函数和外部函数

在一个源程序文件中定义的函数,若限定它只能在本源程序中使用,成为内部函数,用static修饰

static int func(){}

 

在多个源文件组成的程序中,一个源程序文件定义的函数,不仅能在本源程序文件中使用,也可以在其他源程序文件中使用,称为外部函数。extern可加可不加。