进程的内存分布

进程的内存分布

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

进程:正在系统中运行的程序

进程映像:进程的内存分布情况

名称存储内容
text代码段(代码段+只读段)存储的是二进制指令、常量,权限是只读,如果强制修改会产生段错误
data数据段初始化的全局变量、初始化过的静态局部变量
bss静态数据段未初始化的全局变量、未初始化的静态局部变量,在该段内存中的数据在程序开始前会自动清理为0
stack栈局部变量和块变量,会随着程序的运行不断地申请、释放,由操作系统管理,使用方便,内存小
heap堆该段内存由程序员手动管理,使用麻烦,足够大
  • 全局变量:
    定义在函数外的变量
    存储位置:data(初始化) 或者 bss(未初始化)
    生命周期:程序开始到程序结束
    使用范围:程序的任意位置都可以使用
    局部变量:定义在函数内的变量
    存储位置:stack 栈内存
    生命周期:从函数开始到函数结束
    使用范围:只能在该函数内使用
  • 块变量:定义在if/for/while等语句块内的变量
    存储位置:stack 栈内存
    生命周期:从语句块开始到语句块结束
    使用范围:只能在语句内使用
    注意:同名的局部变量会屏蔽同名的全局变量
    同名的块变量会屏蔽同名的全局、局部变量
    因此建议全局变量首字母大写,局部变量全部小写

类型限定符:

  • auto
    用于定义自动申请、自动释放的变量(局部变量),不加就代表加了
    注意:在C11语法标准中用于自动类型识别
    auto num = 10;  	//int
    auto num = 3.13;	//double			
    
    注意:不用用它修饰全局变量
  • extern
    用于声明外部变量,意思是告诉编译器此变量在程序的其他地方已经定义了,先让程序通过编译,如果在链接时找不到该变量依然会报错
    不建议在extern时赋值,它只是声明
  • static
    改变存储位置:
    改变局部变量的存储位置,由stack改为data(初始化)或者bss(未初始化)
    延长生命周期:
    延长局部变量的生命周期,直到程序结束才释放
    限制作用范围:
    限制全局变量的使用范围,限制只能在本文件内使用
    注意:使用static修饰全局变量,可以防止该变量被别的文件使用,以及防止命名冲突
    void func(void)
    {
    	static int num = 0; //初始化语句只有第一次生效
    	num++;
    }			
    
  • const
    "保护"变量的值不被显式地修改
    注意:如果通过内存进行修改,还是可以改的
    注意:使用const修饰data段数据,那么该数据会存储到text段中,如果强制修改会段错误
  • volatile
    C编译器会对普通变量的取值进行"取值优化",只要在使用变量过程中该变量没有显式改变,那么编译器会直接使用上一次的结果,而不会每次都去内存读取数据
    加上volatile修饰,让编译器不要对该变量进行"取值优化"
    一般在驱动编程、硬件编程、多线程编程时使用
    volatile int num = 10;
    if(num == num)
    {
    	 //  可能为假
    }		
    
  • register
    ​ 存储介质:
    ​ 硬盘->内存->高级缓存->寄存器->CPU
    ​ 申请把变量的存储介质由内存改为寄存器,但是由于寄存器数量有限,不一定百分百成功
    注意:寄存器变量不能取地址
  • typedef
    ​ 类型重定义
    ​ 在定义变量前,加上typedef,那么原本的变量名就变成了这种数据类型,可以像数据类型一样定义变量
    typedef int num;	//	类型重定义
    #define num int;	//	替换
    num n1				
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值