c语言学习笔记之 存储类 作用区域 生命周期 连接属性

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 可以提升效率。一般慎用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小相619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值