C语言学习条记 Day12(C8内存管理)

[复制链接]
发表于 2026-2-8 18:23:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Day12 内容梳理:
目次
Chapter 8  内存管理
8.1 作用域(变量&函数)
(1)局部变量
(2)全局变量
(3)静态局部变量
(4)静态全局变量
(5)全局函数&静态函数
8.2 内存布局
(1)内存四地区


Chapter 8  内存管理

8.1 作用域(变量&函数)

C语言变量的作用域:
        代码块作用域(是{ }之间的代码)
        函数作用域
        文件作用域

        4种变量的辨析:
变量范例作用域生命周期存储地区
局部变量本函数内部局部变量创建到本函数竣事栈区
全局变量项目中全部文件 步伐创建到步伐竣事数据区
静态局部变量本函数内部 步伐创建到步伐竣事数据区
静态全局变量本文件内部 步伐创建到步伐竣事数据区
        2种函数的辨析:                              
函数范例作用域 生命周期存储位置
全局函数项目中全部文件从步伐创建到步伐烧毁代码区
静态函数本文件内部从步伐创建到步伐烧毁 代码区

别的,extern关键字被用于声明全局变量。
好比全局变量int a在其他文件中已经界说了,想在本文件中使用,必要在本文件中写:
extern int a;

(1)局部变量

界说:在函数内部界说的

作用域、 生命周期、存储地区均如上,就不再重复写了。


(2)全局变量

界说:在函数外部界说的

全部文件的全局变量都不可重名,但是局部变量可以和全局变量重名。

好比下面在“C7_指针”里界说了全局变量int a = 10;然后在“C8_内存管理”里先声明,再打印,运行正常。




(3)静态局部变量

静态局部变量只会初始化一次,可以多次赋值。

如果是平常的局部变量,由于形参无法改变实参(指针除外),以是5次运行的每一次都是从10开始加1,会打五个11,如下图:


而如果是静态局部变量(有static修饰),则只初始化一次,每一次加1都加上了,以是会打印11 12 13 14 15.,如图:



(4)静态全局变量

作用域、生命周期、存储地区拜见上方的表格

未初始化的局部变量在visual studio中是不让使用的,会报错。


而对于全局变量、静态局部变量、静态全局变量,不初始化的话则能打印出0,如下图:




(5)全局函数 & 静态函数

全局函数

作用域、生命周期、存储地区拜见表格。

注意:全局函数的名称是作用域中唯一的,不可有重复。

在C语言中,函数默认都是全局的,在其他文件中声明白之后就可以使用。


静态函数:

加上static关键字则可以将函数声明为静态的,其他文件无法用这个函数,纵然声明白该函数也不管用。

差异文件中的static函数可以重名,毕竟除了界说的谁人文件,其他文件用不了。

先在其他文件中界说一个静态函数:


然后在本文件中先声明再调用,报错如下,分析静态函数只能在本文件中使用:





8.2 内存布局

(1)内存四地区

代码区

步伐实验二进制码(步伐指令)
特点:共享、只读


数据区

加载的信息都是能和步伐“同生共死”的。
包罗:初始化数据区、未初始化数据区、常量区
栈区

体系为每个步伐在栈区分配一个临时空间。
存储着:局部变量、函数信息、函数参数、数组
堆区

存储着:大数据、图片、音频文件、视频文件。
手动开辟:malloc函数
手动开释:free函数
代码区: “只读”是为了防止步伐不测地修改了代码,从而导致调用出题目。
数据区:
①初始化数据区(也叫“静态数据区”大概data段):存的是已被初始化的全局变量、已被初始化的静态变量(静态全局变量&静态局部变量)、常量数据(好比字符串常量)
②未初始化数据区(bss区):存的是未初始化的全局变量、未初始化的静态变量。此中,当地区的数据在步伐开始实验前会被初始化为0大概NULL。
③常量区:存常量。
栈区:由编译器主动分配和开释,在步伐运行过程中实时加载和开释。
堆区:这个地区理论上没有空间限定,取决于你的内存巨细。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表