当程序开始运行后,会加载到内存中,会把内存分成若干个段,每一段的功能和权限不同。
代码段:
通常是用来存放程序执行代码的的一块内存区域,该段的权限是只读权限,存放的是二进制指令、常量、具有const属性且被初始化过的全局变量和静态变量、字符串字面值。
只读段:存放一些只读的数据,有字符串字面值
数据段:
用来存储被初始化过的全局变量和静态变量
BSS段:
用来存储未被初始化过的全局变量和静态变量
bss段(静态数据段)的特点:具有读写权限,并且这段内存会被清理为0,因此为被初始化过的全局变量和静态变量会有默认值0。
栈(Stack):
栈内存大小有限,有操作系统管理,以函数为单位使用(函数调用结束后便会自动释放)
存储的是局部变量(但不包括static声明的变量,static变量存储在DATA或BSS段)、块变量、数组。
堆(heap):
由程序员手动管理的一块内存,它的申请和释放必须由程序员自己调用函数实现,并且标识符无法与内存建立映射关系必须和指针配合使用