C程序的内存分区(节选自黑马训练营day1)

一般来说,每个C语言编写的程序都需要经过保存,预处理,编译,汇编,链接,最后生成二进制可执行文件,然后才能运行。这个可执行文件在运行之前,存放在电脑硬盘;执行的时候,被调入内存。

同时,我们要了解:组成C语言程序的不同的元素(如变量、常量、指令等)要放在内存中不同的地方,我们看下图:

这个就是内存的分区表格,C编译器将内存划分成几个分区,将C语言程序的不同元素放入不同的分区。不同分区不仅仅存放的程序元素不同,而且生命周期不同。管理内存加载和释放的管理者也不同。代码区和程序数据区(或者叫静态区、全局区)是编译器(也许是操作系统)管理,堆区是程序员管理(有的编译器也帮助管理,作为防火墙性质地存在,防止程序员忘记释放内存),栈区则是实时加载和释放,函数的参数值、返回值、局部变量等随着函数运行结束,自动加载,自动释放(这个应该是编译器管理)。

其实,按照C语言程序的生命周期,整个内存分区可以分为三个部分:

第一部分:代码区和程序数据区,存放指令和全局变量、静态变量、常量,生命周期是整个程序运行过程。

第二部分:堆区,存放内容及生命周期由程序员指定。

第三部分:栈区,存放函数的参数值、返回值、局部变量,相关内存的内容随着函数结束运行而释放。

posted @ 2019-06-16 11:27  大老菜  阅读(426)  评论(0编辑  收藏  举报