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

Posted shellmad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C零基础视频-45-内存的分区:全局区栈区堆相关的知识,希望对你有一定的参考价值。

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

为什么程序的内存有分区

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

技术图片

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

程序运行时的内存分区

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

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

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

#include <stdio.h>

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

堆内存

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

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

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

以上是关于C零基础视频-45-内存的分区:全局区栈区堆的主要内容,如果未能解决你的问题,请参考以下文章

C语言:内存四区

C语言之内存四区

c语言 动态内存规划

c语言 动态内存规划

iOS程序中的内存分配 栈区堆区全局区(转)

C++内存分区模型