一个程序咋爱内存占用的存储空间可以分为:
程序区:用来存放可执行程序的程序代码的。
静态存储区:静态变量,在程序开始执行时分配,在执行过程中是固定的,程序执行完后释放空间。
动态存储区:动态变量和形参以及函数调用时的现场保护程序和返回地址等。
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可加可不加。