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

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函数释放后,里面的数值是不会改变,仅仅是该内存被系统回收;
  • 释放内存并不会对内存做任何修改,更不会将内存清零。

相关文章:

  • Topaz Photo AI for Mac v3.5.2图像质量增强 支持M、Intel芯片
  • python-列表的操作以及切片
  • 异常(完)
  • 计算GPS点之间距离(JS实现)
  • 从C语言开始的C++编程生活(1)
  • 第二十七篇 数据仓库与维度建模指南:从理论到实战的进阶之路
  • 无需OpenAI API运行OpenManus!
  • docker和k8s区别详解
  • NLP高频面试题(五)——BERT的基本结构介绍、预训练任务、下游任务
  • Business processes A bridge to SAP and a guide to SAP TS410 certification
  • 资源文件逆向与界面篡改技术
  • 案例驱动的 IT 团队管理:创新与突破之路:第一章 重构 IT 团队管理:从传统到创新-2.1.3 反直觉案例:非技术背景成员的价值挖掘
  • C语言动态内存管理(下)
  • 18.封装红黑树实现mymap和myset
  • luogu「EZEC-10」打分 --- Python3 解法
  • libaom 源码分析:scalable_decoder.c 文件
  • 村民信息管理系统
  • SpringBoot可以同时处理多少请求?
  • 使用 Arduino 的基于物联网的空气污染监测系统
  • 群体智能优化算法-爱情进化算法 (Love Evolution Algorithm, LEA,含Matlab源代码)
  • 内蒙古赤峰市城建集团董事长孙广通拟任旗县区党委书记
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 通往国际舞台之路:清政府与万国公会的交往
  • 上海制造佳品汇大阪站即将启幕,泡泡玛特领潮出海
  • 现场丨在胡适施蛰存等手札与文献间,再读百年光华