进程映像和类型限定符

it2026-08-09  2

进程映像:

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

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

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

​ text 代码段 储存的是二进制指令、常量,权限只读,强行修改会产生段错误

​ data 数据段 储存的是初始化后的全局变量、初始化后被static修饰的局部变量

​ bss 静态数据段 储存的是未初始化的全局变量,未被初始化后被static修饰的局部变量,程序运行时会被清理为0

​ stack 栈 储存局部变量、块变量,会随着程序不断申请、释放,由操作系统管理

特点:小

​ heap 堆 由程序员手动管理,特点:足够大

局部变量和全局变量:

局部变量:定义在函数内的变量

​ 储存位置:stack 栈内存

​ 生命周期:函数调用开始时知道函数执行结束

​ 适用范围:只能在本函数内使用

全局变量:定义在函数外的变量

​ 储存位置:data(被初始化过的)或者 bss(未被初始化)

​ 生命周期:main函数运行前直到程序结束才释放

​ 适用范围:程序任意位置都可以使用

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

​ 储存位置:stack 栈内存

​ 生命周期:函数调用开始时直到函数执行结束

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

注意:局部变量可以与全局变量同名,会屏蔽同名的全局变量,建议全局变量首字母大写

存储介质:硬盘->内存->高速缓存

类型限定符

auto 用于定义自动分配、释放内存的变量(局部变量),不加就代表了加

​ 注意:全局变量的时候不能用它修饰

​ C11标准 用于自动类型的识别

extern 声明变量,意思是声明此变量在别处已经定义了,请放心使用

​ 只是临时让编译能够通过,连接时如果找不到依然报错

​ 声明外部变量时不可以赋值,即不可以初始化

static 改变储存位置:

​ 改变局部变量的储存位置,由stack改为data或者bss

​ 延长生命周期:

​ 延长局部变量的生命周期

​ 限制作用域

​ 限制全局变量、函数,只能在本文件中使用

​ 可以防止全局变量、函数命名冲突,或者也可以防止别人调用

const “保护”变量不被显式地修改

​ 如果对初始化后的全局变量、静态局部变量,储存位置改为text,不能被修改

volatile 如果变量值没有被显示地修改,在使用这个变量时不会每次都从内存中读取,而会继续使用上一次读取的结果

​ 加上volatile,程序会在使用这个变量时,都会从内存中读取一次

register 申请把变量的储存介质由内存改为寄存器,可以大大地提升运行速度,但是由于寄存器数量有限,申请不一定成功

​ 注意:这种变量不能取地址

typedef 类型重定义,定义变量时如果前面加入typedef那么变量名就变成了这种类型

​ 注意:不是替换

​ typedef int num;

​ num num1;

最新回复(0)