C语言中的进程映象和类型限定符

程序是指存储在磁盘上的可执行文件(二进制文件、脚本文件);

进程是指在系统中进行中的程序;

进程映像:指进程内存的分布情况,主要存储区域有以下几个:

        Text 代码段(只读段)  

            存储二进制指令、常量数据(只读),强制修改会发生段错误(非法访问内存)

        data 数据段

            初始化的全局变量、初始化的静态局部变量;

        bss静态数据段

            未初始化的全局变量,未初始化的静态局部变量,在程序开始时会默认清零

        stack 栈

            局部变量、块变量,由操作系统管理,能自动申请和释放,内存还会随时增加和减小,十分方便;但空间较小;

        heap 堆

            由程序员手动管理,优点是空间足够大,但申请和释放都需要手动进行,比较麻烦。



 

变量的分类:

    局部变量

        定义在函数内的变量;(建议小写)

        存储位置:stack 栈内存;

        生命周期:从函数调用到函数的结束;

        作用范围:只能在函数内使用

    全局变量

        定义在所有函数外的变量;(建议首字母大写)

        存储位置:data或dss(取决于变量是否有初始化);

        生命周期:从程序开始到程序结束;

        作用范围:在程序内任意位置(其他文件也可使用);

    块变量

        定义在语句块的变量 if/for/while

        存储位置:stack 栈内存;

        生命周期:从函数调用到函数的结束;

        作用范围:只能在语句块内使用

    注意:

     当局部变量和全局变量同名时,函数内会屏蔽同名全局变量;

    当块变量和局部变量、全局变量同名时,函数内会屏蔽同名全局变量和局部变量



 

类型限定符:

    Auto:

        自动分配内存、释放内存的变量,在C语言中一般用不到,但在C11中用于自动识别类型,可根据赋值自动改变类型;   

        全局变量不能用auto修饰;

        在C11中用于自动识别类型,可根据赋值自动改变类型;

                       

    Extern

        申明变量 告诉编译器该变量已经在别处定义过了;(防止报错)

        格式:

            extern int Num;(接申明)

        一般在多文件编程中使用*


 

    Static

            被它修饰的局部变量称为静态局部变量,有以下几个改变:

       1、 延长生命周期

            延长局部变量的生命周期至进程结束;

       2、限制作用范围

            限制全局变量和函数的作用范围,只能在本文件内使用;

            防止全局变量、函数命名冲突,也防止被其他文件使用。

        3、改变变量的存储位置

            改变局部变量的存储位置,从stack改为data或bss 取决于是否初始化 (初始化为0的变量也会存到bss)

    Const

        “保护”变量的值不能被显式地修改

        但是可以通过访问内存来修改;

        如果修饰了初始化的全局变量或初始化后的静态局部变量,则该变量存储位置会从data改为text,变成了“常量”,无法强制修改

    Volatile

        被修饰的变量不再进行取值优化,每次调用都会去寄存器读取;

        Volatile int num;

        if(num===num)

        上述语句不一定一直为真,因为可能在两次读取num值的过程中因为外部因素导致寄存器的值发生了改变。


 

    Register

        申请把变量的存储介质由内存改为寄存器,由于寄存器数量有限,申请不一定成功。

        寄存变量不能取地址

    Typedef

        类型重定义

        定义变量时如果在类型前加上,变量名就变成了这个类型的新类型名,并不是替换关系




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值