C语言学习第30篇---程序的内存布局
想比较好的理解这部分需要学习编译原理
程序文件的一般布局---这个不错
右边是可执行程序,是没有栈和堆的
引出概念:程序和进程
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
- 点赞
- 收藏
- 关注作者
评论(0)