当前位置: 首页 > article >正文

c语言笔记 存储期

目录

基本概念

自动存储期

静态存储期

自定义存储期


基本概念

        在c语言中变量是有生存周期的,一个变量向系统申请内存就是变量的诞生,到内存被释放。这个从诞生到释放的过程就是生命周期。
根据定义的不同我们分为三种生命周期的情况:
  1. 自动存储期
  2. 静态存储期
  3. 静态存储期

自动存储期

        知识:自动存储期是指在栈内存中的变量,这些变量不需要我们开发者去担心内存的问题,因为在栈内存中是会被系统释放的,也就是说在{}内生效,出{}外内存就会被系统自动回收,在变量定义处分配空间,出了作用域就被系统释放。
下面三种概念是等价的:
  1. 自动变量:在存储期角度上,描述变量的时间性
  2. 临时变量:同上
  3. 局部变量:在作用域角度上,描述变量的空间性

静态存储期

       知识: 静态存储期是值在数据段中分配的变量,也称为静态变量。这一类的变量生命周期比较长,会跟着程序结束而释放,不会在程序运行时候被系统自动释放,生命周期是恒定的,跟谁着整个程序。
注意:
    1.被static修饰的局部或者全局变量 具有静态存储期
    2.全局变量都具有静态存储期
被static修饰的变量 不是说不能修改值,而是它的内存存储不会变。
    关于static修饰需要注意以下几点:
  1. 被static修饰的变量,如果没有初始化就会默认值为0;
  2. 被static修饰修饰的全局变量会变成仅本文见;
  3. 被statici修饰的局部变量会从栈内存移动到数据段;
  4. 被static修饰的局部变量会变成静态数据,跟随着整个程序吗,随着程序的结束而被释放;
  5. 被static修饰的局部变量只会初始化一次,下次运行时候会变成修改后的值;
  6. static修饰的变量不会消失,但是不能在其他函数内使用,可以通过指针去访问;
        如果一个变量被static修饰,并且是在函数内部定义的,那么它的作用域仅限于该函数内部。其他函数不能直接访问这个变量,虽然其他函数不能直接访问static修饰的变量,但如果通过指针传递该变量的地址,其他函数可以通过指针间接访问该变量。在C语言中,static修饰的变量的生命周期是整个程序的运行期间。即使函数执行完毕,静态变量的值仍然存在,直到程序结束。

自定义存储期

        相比于上面的两类存储期,一种是由系统自动释放,在{}内分配,出{}被释放;一种是跟随着程序的结束而消失,那么对于这些不能控制的生命周期,我们自定义存储期是可以控制变量的生命周期的,申请一块内存和释放一块内存都是由开发者决定,那么我们就要用到自定义存储期。
分配在堆内存,堆空间内的变量是具有自定义存储期的。
相关的API:相关函数使用笔记的知识在我的文章 《c语言笔记 推内存管理》https://blog.csdn.net/2201_75840339/article/details/146212884?fromshare=blogdetail&sharetype=blogdetail&sharerId=146212884&sharerefer=PC&sharesource=2201_75840339&sharefrom=from_link
  1. malloc函数;
  2. calloc函数;
  3. bzero函数;
  4. free函数;
        字符串函数的头文件都是#include
注意:
1.如果说我分配变量到堆内存,然后我不释放它,那么它是跟谁着整个程序的结束而结束; 
2.使用malloc函数后,申请的内存初始化值是随机的;
3.使用calloc函数后,申请的内存初始化是0;
4.free函数只能释放堆内存的空间,不能释放其他内存区域;
5.free函数释放后,原先的指针依旧指向这块空间,会变成野指针所以必须要置空;
6.free函数释放后,里面的数值是不会改变,仅仅是该内存被系统回收;
  • 释放内存并不会对内存做任何修改,更不会将内存清零。

http://www.kler.cn/a/591718.html

相关文章:

  • 【实习经历Two:参与开源项目,学习并应用Git】
  • 解决qt中自定插件加载失败,不显示问题。
  • 报数游戏/补种未成活胡杨[E卷-hw_od]
  • HTML 新手入门:从零基础到搭建第一个静态页面(二)
  • 将温度预测的神经网络部署到服务器端,封装成api接口步骤
  • 高级java每日一道面试题-2025年3月04日-微服务篇[Eureka篇]-Eureka是什么?
  • Blender-MCP服务源码2-依赖分析
  • 再学:函数可见性、特殊函数、修饰符
  • ArcGIS Pro 制作风台路径图:从数据到可视化
  • MySQL5.7主从复制教程
  • 【HTML】三、表单与布局标签
  • 群体智能优化算法- 豪猪优化算法 (Crested Porcupine Optimization, CPO,含Matlab源代码)
  • 深入学习恩智浦 GoPoint:探索 AI Demo 与嵌入式 AI 开发
  • IPD解读——IPD重构产品研发与产品管理
  • 25届二本:春招希望不大,要做两手准备了
  • 【多线程】线程不安全问题
  • Couchbase Analytics 的结构
  • CRM企业客户关系管理系统产品原型方案
  • FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍
  • Spring Boot 整合 Nacos 注册中心终极指南