目录
- 为什么程序的内存有分区
- 程序运行时的内存分区
- 堆内存
不久的将来,我们要开始学习在C中动态申请和释放内存。在学习它们之前,我们先学习程序内存的分区,为掌握和理解动态申请、释放内存做好基础铺垫。
为什么程序的内存有分区
一般而言,我们的住房会分成多个区域(卧室、厨房、阳台、卫生间等),不同区域有不同的功能。
运行时,程序分区的道理也是一样的,它方便操作系统管理程序,内存的不同区域,功能不同。
程序运行时的内存分区
作为初学者,我们简单认识下,程序有全局区、栈区和堆区即可。
- 全局区:在main函数执行前就已经分配好,程序的代码(机器码)、全局变量都在全局区
- 栈区:随着函数调用及返回,会被自动分配和回收。栈的空间大小比较有限(M级别)。
以下代码可以证明,栈的空间比较有限:
#include <stdio.h>
int main(int argc, char* argv[])
{
char szBuff[10000000];
return 0;
}
堆内存
不管了全局区还是栈区的内存,他们通常都只占可以使用的内存的一小部分,大量的内存被操作系统控制,按需动态分配。
这时,操作系统的角色类似于酒店,而内存就是房间。
我们动态申请内存的动作,类似于入驻酒店前订房;
我们动态释放内存的动作,类似于退房。
房间一直都存在那,我们能否使用,取决于酒店是否授权给我们(出租给我们)。
内存也类似,内存一直都存在,但是我们程序是否能够使用,使用哪块地址的内存,取决于操作系统如何分配给我们。
以上介绍的,被操作系统控制管理的动态分配、回收的内存区域,就称为堆。
我们之后会学习,如何使用C标准库中的malloc与free函数,动态申请和释放堆中的内存。
原文地址:https://www.cnblogs.com/shellmad/p/11695694.html
时间: 2024-11-08 23:58:01