完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 michael_llh 于 2016-8-21 17:01 编辑
我们知道说,在C语言的编写过程中我们都是只有一个main函数,程序从main开始到main结束,一般我们都没有考虑也就是说追求到最初的源头main函数是由谁调用的,这个我们没有深究对吧,那么我们来看下它是如何运行的。 1.编译连接需要引导代码,这个和我们的单片机引导代码非常相似,这个是有编译器提供的,我们知道在Linux底下我们使用gcc来完成这个工作,那么这个引导代码是什么意思呢?也就是说这个程序的运行它必须具备一定的条件,在这个系统环境下它要就有自己的生存环境,能够在这个环境中运行的条件。 2.第二个就是程序运行的加载器了,当我们编译好了之后我们就是用./a.out来执行我们的程序,这个时候程序加载器就会把把程序加载到内存当中运行并返回我们结果。 总的过程就像是做一道菜对吧,首先你需要把原材料备齐,然后才可以做出美味的饭菜。同样的道理,编译连接就是一个准备原材料的过程,运行就是将其做成可口的饭菜。 程序结束的几种方式: 1.正常结束,也就是说我们的程序一直运行,直到遇到return、exit、_exit程序终止 2.非正常结束,自己或者他人发送信号终止程序 这里我们注意一下exit和_exit的区别: 前提我们需要了解一个函数就是int atexit(void *function(void)),这个函数是用来注册我们进程终止函数的,也就是说当一个进程终止的时候,程序会调用这个函数。那么exit和_exit的区别就是exit会执行这个进程终止函数,而_exit不会执行。 如果我们注册了多个进程终止函数的恶化,则是先注册的先执行的这样和栈类似的方式。 我们来看下环境变量,对于系统而言我们都知道有环境变量这个说法,当我们在终端的时候输入ls,cd这些命令的时候,就是调用环境变量然后对应执行相应的可执行文件。那么在Linux底下我们可以使用export来看下系统中所有的环境变量。 进程环境表,每一个进程中都有一份所有环境变量构成的一个表格,也就是说我们可以直接使用这些变量。进程环境表实际就是一个字符串数组,用environ变量指向它。获取指定环境变量的函数是getenv。 操作系统的每个进程都是独立在自己的地址空间中运行的。 在32位系统环境中最大可以使用的物理内存为0~4G,在4G内存当中,1G为系统调用而深下的3G就是应用内存了。中间存在一个虚拟地址到物理地址空间的映射。 每个进程都有着进程隔离的说法,也就是说一个进程执行的时候她压根不知道还有一个进程在执行,当然目前来说是这样,没有涉及到进程通信。
|
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
1701个成员聚集在这个小组
加入小组「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4902 浏览 0 评论
87423 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4740 浏览 2 评论
3628 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2489 浏览 0 评论
2017浏览 3评论
1301浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1360浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1244浏览 0评论
1182浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 15:52 , Processed in 1.209652 second(s), Total 67, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号