马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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。
③常量区:存常量。
栈区:由编译器主动分配和开释,在步伐运行过程中实时加载和开释。
堆区:这个地区理论上没有空间限定,取决于你的内存巨细。
|