当前位置: 首页 > 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函数释放后,里面的数值是不会改变,仅仅是该内存被系统回收;
  • 释放内存并不会对内存做任何修改,更不会将内存清零。
http://www.dtcms.com/a/75526.html

相关文章:

  • 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源代码)
  • 51c自动驾驶~合集24
  • RCore学习记录002
  • AI时代API安全挑战加剧,解读API防护的最佳方案
  • 浅谈鸿蒙跨平台开发框架ArkUI-X
  • Nginx 代理访问一个 Web 界面时缺少内容
  • S32K144入门笔记(十六):ADC的API函数解读
  • 洛谷 P3986 斐波那契数列
  • 【SoC基础】单片机常用总线
  • 银行数字化转型
  • Superagent 异步请求:如何处理复杂的 HTTP 场景