程序:储存在磁盘上的可执行文件(二进制文件,脚本文件)
进程:正在系统中运行的程序
进程映像:指的是进程内存的分布情况
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;
