变量的分类:
变量的属性:存储位置 生命周期 作用域
全局变量:
data 初始化过的,bss 未初始化的
整个程序的运行时期
任何位置都可以使用,其它源文件中需要声明
静态全局变量
data 初始化过的,bss 未初始化的
整个程序的运行时期
在目标文件内可以使用
局部变量
stack
函数开始执行到结束
函数内
静态局部变量
data 初始化过的,bss 未初始化的
整个程序的运行时期
函数内
进程的内存分布:
text 代码段:存储的是二进制指令、常量(字符串字面值),该内存段的权限为只读,一旦强行修改就会产生段错误。
data 全局数据段:里面存储着初始化过的全局变量、静态变量。
bss 静态数据段:里面存储着末初始化过的全局变量、静态变量,该内存段在程序执行前会被初始化为0。
heap 堆:由于程序员手动管理,该内存无法与标识符建立映射关系(无法取名字),必须与指针配合使用。
优点:够大,分配和释放可控。
缺点:使用麻烦,容易产生内存泄漏、内存碎片。
stack 栈:由系统自动管理,随着函数被调用,会自动分配内存,函数执行结束后自动释放内存。
优点:使用方便,采用栈结构方式管理安全,不会产生内存泄漏、内存碎片。
缺点:大小有限,一次使用过多可能会产生段错误,分配和释放不可控不适合长期保存数据。