1、内存的分区概念
在计算机系统,特别是嵌入式系统中,内存资源是非常有限的。尤其是对于移动端开发者来说。硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效的管理内存资源。
Linux系统下
2、C程序中数据所在内存分区
1、普通局部变量
自动申请空间,存储在栈区 作用范围:离他最近的 { }直接有效 生命周期:离他最近的{ } 有效 离开该区域后被释放回收 存储区域:栈区
注意事项:
1、局部变量不初始化内容随机
2、局部变量 同名 按照离使用最近的一个取值(就近原则)
2、普通全局变量
存储在全局区
作用范围:当前源文件或其他源文件(extern 声明) 都识别
生命周期:整个进程,整个运行程序结束的时候才被释放
存储区域:全局区
注意事项:
1、全局变量不初始化 内容为0
2、如果使用的全局变量 在其他源文件中必须使用extern在使用的源文件中声明
3、全局变量 和 局部变量 同名时 优先选择局部变量
3、静态局部变量
存储在全局区
定义形式:在{}里面加static修饰定义的变量 就是静态局部变量
作用范围:离最近的{}之间有效
生命周期:整个进程
注意事项:
1、静态局部变量 不初始化 内容为 0
2、只能被定义一次
实例:1
//普通全局变量
void my_fun()
{
//普通局部变量
int num4 = 10;
num4++;
printf("num4 = %d\n", num4);
}
void test01()
{
//函数结束 普通局部变量 被释放 函数再次被调用
//普通局部变量 会被重新定义 所以出现4个11
my_fun();//11
my_fun();//11
my_fun();//11
my_fun();//11
}
int main(int argc, char const *argv[])
{
test06();
return 0;
}
实例:2静态局部变量
void my_fun()
{
//静态局部变量 只能被定义一次 以后的定义语句无效
static int num4 = 10;
num4++;
printf("num4 = %d\n", num4);
}
void test01()
{
//函数结束 静态局部变量 不被释放 函数再次被调用
//静态局部变量 不会被重新定义 而是使用上次的值
my_fun();//11
my_fun();//12
my_fun();//13
my_fun();//14
}
int main(int argc, char const *argv[])
{
test06();
return 0;
}
4、静态全局变量
static int data2 = 666;//静态全局变量
void test02
{
...
}
作用范围:只能在当前源文件中有效 不能用于其他源文件
生命周期:整个进程
存储区域:全局区
注意事项:
1、静态全局变量 不初始化 内容为0
2、静态全局变量 只能在 当前源文件使用