C零基础视频-45-内存的分区:全局区、栈区、堆

不久的将来,我们要开始学习在C中动态申请和释放内存。在学习它们之前,我们先学习程序内存的分区,为掌握和理解动态申请、释放内存做好基础铺垫。

为什么程序的内存有分区

一般而言,我们的住房会分成多个区域(卧室、厨房、阳台、卫生间等),不同区域有不同的功能。

运行时,程序分区的道理也是一样的,它方便操作系统管理程序,内存的不同区域,功能不同。

程序运行时的内存分区

作为初学者,我们简单认识下,程序有全局区栈区堆区即可。

  • 全局区:在main函数执行前就已经分配好,程序的代码(机器码)、全局变量都在全局区
  • 栈区:随着函数调用及返回,会被自动分配和回收。栈的空间大小比较有限(M级别)。

以下代码可以证明,栈的空间比较有限:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char szBuff[10000000];
 return 0;
}

堆内存

不管了全局区还是栈区的内存,他们通常都只占可以使用的内存的一小部分,大量的内存被操作系统控制,按需动态分配。
这时,操作系统的角色类似于酒店,而内存就是房间。
我们动态申请内存的动作,类似于入驻酒店前订房;
我们动态释放内存的动作,类似于退房。
房间一直都存在那,我们能否使用,取决于酒店是否授权给我们(出租给我们)。
内存也类似,内存一直都存在,但是我们程序是否能够使用,使用哪块地址的内存,取决于操作系统如何分配给我们。

以上介绍的,被操作系统控制管理的动态分配、回收的内存区域,就称为

我们之后会学习,如何使用C标准库中的malloc与free函数,动态申请和释放堆中的内存。

猜你喜欢

转载自www.cnblogs.com/shellmad/p/11695694.html