C/C++笔记—内存四区模型
C/C++笔记—内存四区模型
操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
1.栈区:
用于存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。用完由操作系统自动释放,一般是由编译器自动分配释放的。栈向下生长,栈分配的地址越来越小。
2.堆区:
动态分配给程序的内存区域,由程序员手动释放,若程序员不释放,程序结束时可能由OS回收。这里的堆并不等于数据结构里的堆,分配方式更类似于链表。堆向上生长,当给变量分配内存时,而堆分配的地址则越来越大
3.数据区:
程序结束后由系统释放
第一种:常量区:存放常量,一般是字符串常量
第二种:全局区/静态区(Static):存放全局变量和静态变量,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
4.代码区:
存放函数体(语句)的二进制代码。
5.举例分配:
c/c++在临时区分配内存,用完后自动被编译器清理
int a = 1;
//局部变量,放到栈区,空间自动分配释放int *p = &a;
//语句,放到代码区p = (int *) malloc(sizeof(int))
//动态申请,放到堆区,空间手动释放static int i = 5;
//静态变量,数据区#define PI 3.14;
//常量,数据区
6.模型流程图:
这张图的流程:
1、操作系统把物理硬盘代码load到内存
2、操作系统把c代码分成四个区
3、操作系统找到main函数入口执行
4、总:c/c++在临时区分配内存,用完后自动被编译器清理