内存四区
/*
*运行平台:Visual Studio 2015
*参考资料:《C Primer plus 第六版》,传智扫地增C提高课程
*/
一、什么是内存四区
内存四区:由人的习惯,在逻辑上将C语言程序的内存模型归纳为以下四大区域。
栈(stack) | 堆(heap) | 静态全局区 | 代码区 | |
---|---|---|---|---|
存放内容 | 函数中的形参、返回地址、局部变量以及函数运行状态等数据 | 数据存放需要申请 | 主要用来存放全局变量、静态变量以及常量 | 存放程序编译链接后生成的二进制机器码指令 |
管理方式 | 编译器自动分配、自动释放 | 程序员手动分配、手动释放,如果不释放,只有当程序运行结束后,操作系统才会去回收这片内存 | 只有在程序运行结束后才会被操作系统回收 | 操作系统管理 |
二、如何画/理解内存四区
下面将通过代码进行介绍
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main()
{
int num = 0;
char *p1 = "asd";
char *s = NULL;
s = (char*)malloc(10); //在堆区申请地址
s = "123";
printf("=======打印各变量在栈区的地址=====\n");
printf("num=%d,p1=%d,s=%d\n", &num, &p1,&s);
printf("=======打印各变量在栈区所存储的数据=====\n");
printf("num=%d,p1=%d,s=%d\n", num, p1,s);
printf("=======打印指针变量在栈区存储的数据所对应的内存块的数据=====\n");
printf("p1=%s,s=%s\n", p1,s);
system("pause");
return;
}