您的位置:首页 > 其它

C 语言程序的存储区域

2013-01-15 14:11 537 查看
1.C 语言程序的运行有如下几个阶段

<1>编译

<2>汇编

<3>链接

<4>运行

2.程序文件在调入内存后,经历编译-汇编-链接后会形成一个文件,这个文件有如下几个部分:

<1>代码段: 保存机器码的存储区域

<2>只读数据段: 保存不会被更改的数据的存储区域,如const char str[]="abc";

只读外部变量,const char str[]="def";

只读自动变量, const char str[]="abc";

程序中使用的常量,printf("ddddd\n");

<3>已初始化读写数据段: 保存已经有了初值的变量存储区域,如 外部变量 int a=10;静态变量 static int b=10;'

外部变量

静态变量(内部链接)

静态变量(代码快作用域、空连接、静态存储期)

<4>未初始化数据段: 没有初值的变量,在程序运行前,这部分变量不占用存储空间,如外部变量 int a;

外部变量

静态变量(内部链接)

静态变量(代码快作用域、空连接、静态存储期)

<5> 堆 :主程序运行时分配,如 malloc,relloc,

<6> 栈 : 程序运行时分配,主要用于自动变量以及函数参数等。

3.程序编译链接后,形成 代码段,只读数据段、已初始化读写数据段。程序运行前的初始化阶段,形成未初始化数据段。程序运行时形成堆和栈。

4.代码段、只读数据段、已初始化读写数据段、未初始化数据段属于静态存储区域,其他的属于动态存储区域。所以说外部变量、常量、所有的静态变量都保存在静态存储区。

动态区的内存,特别是堆中的内存在分配使用完毕后,需要释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐