有几天没来了,今天翻到了进程中内存区域划分笔记 ,就简单写写
(1)代码区:(text)
主要用于存放功能代码,函数指针指向该区域,比如函数名。
(2)只读常量区:(text)
存放字符串常量和用const修饰的,并且已经初始化的全局变量和静态局部变量。
(3)全局区/数据区:(data)
存放已经初始化的全局变量和静态局部变量(这个区的数据都有存储空间,生命周期是整个程序)。
(4)bss段:
存放没有初始化的全局变量和静态局部变量,bss段会在main函数执行前清0。
(5)堆区:
主要表示使用malloc / calloc / realloc / free等手动申请的动态内存,需要手动释放。
(6)栈区:
主要存放非静态局部变量(包括函数的参数),块变量,有操作系统自动管理。
进程主要分为这几个区。在进程和线程的使用中注意变量所在的区域。否则很容易出现段错误