进程映像、变量的分类、类型限定符简介

进程映像:

程序:存储在磁盘上的可执行文件(二进制、脚本)
进程:在系统中正在运行的程序
进程映像:指的是进程的内存分布情况
text    代码段 二进制指令
        只读段 常量
        只读的,强制修改会产生段错误
data    数据段
        初始化过的全局变量和初始化过的静态局部变量
bss     静态数据段
        未初始化过的全局变量和未初始化过的静态局部变量
        运行前该段会自动清零,默认值是0
heap    堆
        由程序员手动管理,缺点:使用比较麻烦,优点:足够大
stack   栈
        局部变量、块变量
        由系统管理、会随着函数的调用自动分配内存、函数的结束释放内存
        优点:使用方便 缺点:大小有限,超过会段错误

变量的分类:

存储位置、生命周期、使用范围
全局变量:  定义在函数外的
    data或者bss,取决于是否初始化
    从程序运行开始前到执行结束
    任何位置
局部变量:  定义在函数内的
    stack 
    从函数调用开始到函数执行结束
    只能在函数内使用

块变量:    定义在语句块内
    stack 
    从定义语句开始到函数执行结束
    只能在语句块内使用

全局、局部、块变量可以同名,同名的局部屏蔽全局,同名的块屏蔽局部和全局变量
全局变量首字母大写

类型限定符:

auto 
    用于自动申请,释放内存的变量,不加就等于加
    不能再全局变量前使用,不能与static同时使用
extern
    用于声明外部的变量
    当a.c中定义一个全局变量,b.c中如果想要使用就需要使用extern声明
    如果没有,只能通过编译,不能通过链接
    不能对声明语句赋值
static
    改变存储位置
        局部变量、块变量,由stack改为data或bss
    延长生命周期
        局部变量、块变量,函数结束时不会被自动销毁
        它们的初始化语句只有第一次生效
    限制使用范围
        全局变量、函数限制为本文件内使用
const
    "保护"变量不被显式的修改
    初始化过的全局变量、静态局部变量被const修饰后存储位置会变成text,变成了真正的常量
volatile
    如果变量没有显式地被修改,再次使用该变量时会继续使用上一次读取的结果,而不会读取内存(取值优化)
    如果有些变量可能被隐式地修改,想要虽只读取准确的数值,就需要使用volatile修饰一下
    在硬件、多线程编译使用
register
    申请把变量的存储位置由内存改为寄存器,提高变量的读写速度,从而提高程序运行速度
    由于寄存器数量有限,不是每次申请都能成功
    注意:这种变量不能取地址
typedef   
    类型重定义,如果在定义变量前加typedef,变量名就等同于类型
    常见 size_t time_t uint8_t... 都是使用typedef重新定义出来的
    typedef int INT
    注意:不是替换
    #define
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值