<2> 内存四区和函数的调用模型

来源:互联网 发布:网购选哪软件好 编辑:程序博客网 时间:2024/06/01 16:31

1 . 内存四区

1 . 1 内存四区图

如下图,这是操作系统在执行程序时的分配内存情况,内存管理将内存分为四个部分:堆、栈、数据区域、代码区域。


 当编译器执行代码的时候,首先是从硬盘中将代码加载到内存中,然后操作系统将代码分为4个部分:堆、栈、数据区域、代码区域。

 堆:由程序员动态分配内存,并且手动释放。如果程序员不进行手动释放的操作,这部分可能被操作系统回收。(malloc、new、free等)

 栈:由编辑器自动分配和释放,生命周期结束时,被回收,并且根据栈的“先进后出”的原则,先申请的后释放。(int、double、float等)

 全局区:全局变量、静态变量(static)等。

 代码区:存放函数体的二进制代码

 

#include <stdio.h>#include <stdlib.h>#include <string>#include <vector>#include <malloc.h>static std::string text = "123";// 全局区int main(){int a;// 栈(自动分配,Main函数执行结束后,被编辑器释放)int b;// 栈(自动分配,Main函数执行结束后,被编辑器释放)int c;// 栈(自动分配,Main函数执行结束后,被编辑器释放)float a1;// 栈(自动分配,Main函数执行结束后,被编辑器释放)float b1;// 栈(自动分配,Main函数执行结束后,被编辑器释放)float c1;// 栈(自动分配,Main函数执行结束后,被编辑器释放)int *d = (int*)malloc(sizeof(int)*100);// 堆(手动分配,分配了100*4个字节)free(d);// 手动释放system("pause");return 0;}

2 . 函数调用模型