[C语言] 11--存储期

概念: C语言中, 每一个变量都有一个生命周期,所谓的生命周期指的是某一个变量的内存从申请到释放的过程。申请一个内存相当于某一个变量的诞生,释放掉该内存则是相当于消亡。
变量的生命周期有一下三种形式:
①自动存储期
②静态存储期
③自定义存储期

1.自动存储期

概念:在栈空间中分配的变量(内存),统统由系统统一管理,用户不需要担心,因此就称为自动存储期。
有几个概念是等价的:
①自动变量:从存储期的角度来描述变量的存储特性
②临时变量:从存储期的角度来描述变量的存储特性
③局部变量:从作用域的角度来表述变量的空间特定

int main(int argc , char const * argv[])  // argc argv  自动存储期    /  局部变量 
{
     int a ;     // 自动存储期    /  局部变量 
     static int b ;  // 静态存储期  局部变量
     func(a , b); 
}
void func(int x , int y)  // x, y 自动存储期    /  局部变量 
{
    
}

2.静态存储期

概念: 在数据段中分配的变量(内存) , 统统都称为静态存储期,静态存储期的内存, 在程序运行之初就已经分配好 , 不会随着程序的运行发生申请和释放的问题 ,直到整个程序退出才会释。 换句话说他的生命周期与进程一致。
静态存储期:
①全局变量,static只是影响他的作用域,并不影响他的存储期
②static修饰的局部变量,对于局部变量而言static只是改变了变量的存储期,而没有改变他的作用域。

int a = 100 ;    
static int b = 250 ;   //  a  b 都属于静态存储期, 只不过b的作用域为本文件
int main()
{
    int k ;
    static int k = 450 ; // 静态存储期
}

注意:
.bss段 存放的是未初始化的静态变量(静态存储期) 初始值为 0
.data 段 已经初始化的静态变量 , 初始化语句只会被执行一次
静态数据从进程运行之初已经存在, 直到进程退出为止

3.自定义存储期

概念:在堆内存中分配的变量(内存) , 都属于自定义存储期,他的申请与释放完全由用户自己把握。

如何申请:
malloc calloc realloc
如何释放:
free
如何清空:
bzero
memset

注意:
malloc 只负责申请空间, 并不会清空内存,因此一般使用bzero 清空
calloc 负责申请内存,并会默认清空为 0 .
free 只负责释放,也不会清空 更不会让指针指向空, 因此free之后最好让指针指向NULL

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值