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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值