C程序内存分配

本文详细介绍了Linux系统下C程序中数据的内存分区,包括局部变量、全局变量、静态局部变量和静态全局变量的存储位置、作用范围、生命周期及其特点。通过实例展示了不同类型的变量在函数调用中的行为差异,强调了内存管理在嵌入式系统开发中的重要性。
摘要由CSDN通过智能技术生成

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、静态全局变量 只能在 当前源文件使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值