4.7.1 概念解析
1、存储类
1、储存类型:描述C语言中的变量在何种地方存储。
变量时存在内存中的
内存有多中管理方法:栈、堆、数据段、BSS段、.text段。一个变量的属性就是描述存储在哪个内存段中。
2、局部变量就分布在栈上,全部变量分两种,显示初始化为非0的全局变量,分配在在数据段。没有显示初始化的全局变量分配在BSS段(程序执行前自动清零)。
2、作用域
变量起作用的范围
代码块作用域
一个变量的作用域
3、生命周期
一个变量的诞生和死亡。运行时收回这个空间,此后不能再访问这个内存地址。挥着访问这个内存地址已经和这个 变量无关了。
变量和内存的关系,就是和人去图书馆借书一样。
研究变量的生命周期,可以理解一些C语言的现象,一些规则。
4、链接属性
程序从源代码到最终可执行程序。经历的过程:编译、链接。
编译阶段就是把源代码搞成.o目标文件。
C语言中符号有三种链接属性:外链接属性、内链接属性、无连接属性
以上4个概念就是从不同角度分析C语言运行规则。
4.7.2 linux下C语言程序的内存映射
1、代码段、只读数据段
对应程序中的代码(函数),代码段在linux中又叫文本段.text段。
只读数据段就是在程序运行器件不能写。
const修饰的常量 有可能是存在只读数据段。
2、数据段、BSS段
数据段:显示初始化为非0的全局变量,显示初始化为非0的static局部变量。
BSS段:显示初始化为0的或者未显示初始化的全局变量。显示初始化为0的或者未显示初始化的static局部变量。
3、堆
C语言不会向堆中存储中西
程序员更具需求自己判断是否需要堆内存
4、文件映射区
进程打开文件后,将这个文件内容先从硬盘中读取到ram中。以后直接在内存中操作,点击保存时,再将文件写进硬盘。
5、栈
局部变量分配在栈上,函数条用传参也会用到栈。
6、内核映射区
对linux中的每一个进行,它有认为整个系统只有自己和内核,他认为内存地址
0xc0000000一下都是它可用地址,一张就是OS内核的运行地址。
每一个进行都活在自己独立的进程空间
但是内核是唯一的。
7、OS下和逻辑程序加载的差异
C语言 程序运行环境有一定的要求,单独写个C语言程序没法直接在内存上运行。
需要外部一定的协助,这段协助的代码叫加载运行代码。这段代码的主要作用:再给全局变量赋值,清BSS段
4.7.3 存储类相关的关键字1
1、auto
auto 关键字在C语言中只有一个作用,
修饰局部变量,表示自动局部变量,分配在栈上
如果不初始化,值就是随机的。
平时定义局部变量时,就是auto的,只是省略了auto关键字
2、static
static关键字在C语言中有2中用法,两种用法彼此独立。
第一种用法;用来修饰局部变量,形成静态局部变量
static 用来修饰全局变量,形成静态全局变量
静态全局变量和非静态全局变量的区别:区别是链接属性的不同。
3、register
关键字不常用,那就是;register修饰的变量(一般是全局变量),
编译器会尽量将它分配在寄存器中。这种变量被高频使用,通过定义
为register 可以提升效率。一般慎用
c语言学习笔记之 存储类 作用区域 生命周期 连接属性
最新推荐文章于 2024-04-02 17:41:26 发布