C语言学习第30篇---程序的内存布局

举报
CodeAllen 发表于 2021/10/29 22:58:54 2021/10/29
【摘要】 想比较好的理解这部分需要学习编译原理   程序文件的一般布局---这个不错 右边是可执行程序,是没有栈和堆的   引出概念:程序和进程 1.程序是静态的概念,表现形式是一个可执行文件 2.进程是动态的概念,程序是由操作系统加载运行后得到的进程  -----这个是操作系统原理这门课 3...

想比较好的理解这部分需要学习编译原理

 

程序文件的一般布局---这个不错

右边是可执行程序,是没有栈和堆的

 

引出概念:程序和进程

1.程序是静态的概念,表现形式是一个可执行文件

2.进程是动态的概念,程序是由操作系统加载运行后得到的进程  -----这个是操作系统原理这门课

3.每个程序可以对应多个进程

4.每个进程只能对应一个程序

 

 

思考?

面试中的俩个小问题(考察的是对操作系统的理解)

包含脚本的代码的文本文件是一种类型的可执行程序吗?

 

如果是,对应什么样的进程呢?

 

 

程序与进程

 

程序文件的一般布局

进程中有堆,栈,未映射区(对一些特定应用做拓展使用)

 

各个段的作用

1.堆栈在程序运行后才正式存在,是程序运行的基础

2..bss段存放的是未初始化的全局变量和静态变量

3..text段存放的是程序中的可执行代码

4..data段是已经初始化的全局变量和静态变量

5.rodata段是程序中的常量值,如字符串常量

 

 

程序术语的对用关系:

1.静态存储区通常是指程序中的.bss和.data

2.只读存储区是程序中的.rodata

3.局部变量所占空间是栈上的空间

4.动态空间是堆空间

5.程序可执行代码一般是.txtd段

 

 

又是一个面试的问题?

同样是全局变量和静态变量,为什么初始化和未初始化的保存在不同的段中?

未初始化的默认为0,初始化的就按照对应的映射关系进行存储,这是有利于C语言的高效的

一定要有自己的思考!!!

 

 

小结:

1.程序源码在编译后对应的可执行程序中的不同存储区

2.程序和进程不同,程序静态概念,进程是动态概念

3.堆栈段是程序运行的基础,只存在于进程空间中

4.程序可执行代码存放于.text段,是只读的

5..bss和.data段用于保存全局变量和静态变量

 

 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/86683946

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。