通常来讲,每一个C语言编写的程序都须要通过保存,预处理,编译,汇编,连接,最后生成二进制可执行文件,而后才能运行。这个可执行文件在运行以前,存放在电脑硬盘;执行的时候,被调入内存。程序员
同时,咱们要了解:组成C语言程序的不一样的元素(如变量、常量、指令等)要放在内存中不一样的地方,咱们看下图:函数
这个就是内存的分区表格,C编译器将内存划分红几个分区,将C语言程序的不一样元素放入不一样的分区。不一样分区不单单存放的程序元素不一样,并且生命周期不一样。管理内存加载和释放的管理者也不一样。代码区和程序数据区(或者叫静态区、全局区)是编译器(也许是操做系统)管理,堆区是程序员管理(有的编译器也帮助管理,做为防火墙性质地存在,防止程序员忘记释放内存),栈区则是实时加载和释放,函数的参数值、返回值、局部变量等随着函数运行结束,自动加载,自动释放(这个应该是编译器管理)。操作系统
其实,按照C语言程序的生命周期,整个内存分区能够分为三个部分:blog
第一部分:代码区和程序数据区,存放指令和全局变量、静态变量、常量,生命周期是整个程序运行过程。生命周期
第二部分:堆区,存放内容及生命周期由程序员指定。内存
第三部分:栈区,存放函数的参数值、返回值、局部变量,相关内存的内容随着函数结束运行而释放。编译器