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 . 函数调用模型