您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

程序是怎样跑起来的 -- 从源文件到可执行文件

时间:2019-09-20 09:27:17  来源:  作者:

源文件是如何通过编译器换成可执行文件的?

可执行文件被加载到内存后是如何运行的?

程序运行是内存上的栈和堆是如何进行的?

计算机只能运行本地代码(机器语言代码)

编译器负责转换源代码

读入的源代码还要经过语法解析、句法解析、语义解析等,才能生成本地代码

编译器不仅和编程语言的种类有关,和CPU的类型也是相关的。

程序是怎样跑起来的 -- 从源文件到可执行文件

 

仅靠编译是无法得到可执行文件的

本地文件是无法直接运行的,为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。

把多个目标文件结合,生成1个EXE文件的处理就是链接,运行连接的程序就称这链接

启动及库文件

c0w32.obj 这个目标文件记述的是同所有程序起始位置相结合的处理内容,程序的启动

库文件指的是把多个目标文件集成保存到一个文件中的形式。链接器指定库文件后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合生成EXE文件。

不是通过源代码形式而是通过库文件形式和编译器一起提供的的函数称为标准函数

DLL文件及导入库

windows 以函数的形式为应用提供了各种功能。这些形式的函数称为API,并不是C语言的标准函数。

API的目标文件,并不是存储在通常的库文件中,而存储在名为DLL文件的特殊库文件中,这样的库文件称之为导入库。DLL文件是程序运行时动态结合的文件。(个人觉得可以理解为系统文件)

可执行文件运行时的必要条件

每次运行是,程序内的变量及函数被分配到的内存地址是不同的。那么在EXE文件中,变量和函数的内存地址的值,是如何来表示的呢?

答案就是EXE文件中给变量及函数分配了虚拟的内存地址。在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。这个再配置信息,变成为了变量和函数的相对地址

程序加载时会生成栈和堆

当程序加载到内存后,除此之外还会额外生成两个组,那就栈和堆。是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。是用来存储程序运行时的任意数据对象的内存领域。

因此,内存中的程序,就是由用于变量的内存空间,用于函数的内存空间,用于的内存空间,用于的内存空间。当然加载操作系统的内存空间是另外一回事了。

栈中对数据进行存储和舍弃的代码,是由编译器自动生成的,不需要程序员参与。每当函数调用时会得到申请分配,函数处理完成后自动释放。堆则要根据程序员编写的程序,来明确进行申请分配或释放。

直接今天才对内存管理有了个基本清晰的了解,总算找到了一本说得清楚的书了。不过还是有点没太理解堆中的任意数据指的是?还有类和对象在内存的处理方式。



Tags:程序   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
雷军:10年编程路,给程序员的几点建议
随着小米SU7的火热发售,雷军凭借“跨界灭霸”称号又一战封神。作为中国互联网历史上极富传奇色彩的连续创业者,他向大家生动地诠释了“人生在于奋斗”的真谛。雷军作为中国第...【详细内容】
2024-04-15  Search: 程序  点击:(2)  评论:(0)  加入收藏
程序化交易迎来新规
【深圳商报讯】(记者 陈燕青)证监会近日就《证券市场程序化交易管理规定(试行)(征求意见稿)》,向社会公开征求意见。这意味着备受市场关注的程序化交易迎来新规。具体来看,一是明确...【详细内容】
2024-04-15  Search: 程序  点击:(2)  评论:(0)  加入收藏
量化私募火线解读程序化交易新规!
围绕程序化交易的监管新规来了!为加强证券市场程序化交易监管,促进程序化交易规范发展,维护证券交易秩序和市场公平,4月12日,中国证监会发布《证券市场程序化交易管理规定(试行)...【详细内容】
2024-04-13  Search: 程序  点击:(3)  评论:(0)  加入收藏
ChatGPT 应用商店?可能是一个万能应用程序!
OpenAI 在去年 11 月召开了一次开发者大会,首席执行官 Sam Altman 希望软件制造商在 ChatGPT 之上进行进一步的构建。OpenAI 表示,它将很快推出一个市场,开发人员和非技术人员...【详细内容】
2024-04-12  Search: 程序  点击:(8)  评论:(0)  加入收藏
AI程序员上岗 垂类大模型应用迎来井喷期
能自动写代码的“AI员工”、逐渐告别不够好用的智能客服,无需费时费力开发的工业AI控制器……随着人工智能大模型能力开始深入多个行业,IT、工业生产、金融、服务...【详细内容】
2024-04-07  Search: 程序  点击:(4)  评论:(0)  加入收藏
首个AI程序员上岗,码农们暂且不必过度焦虑
“AI程序员上岗”或许是噱头,但淘汰焦虑仍然近在咫尺,需要积极面对。全文2418字,阅读约需7分钟 撰稿 / 马尔文(媒体人)编辑 / 何睿 校对 / 张彦君▲随着相关技术的突飞猛进,AI也在...【详细内容】
2024-04-07  Search: 程序  点击:(5)  评论:(0)  加入收藏
京东小程序数据中心架构设计与最佳实践
一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提...【详细内容】
2024-03-27  Search: 程序  点击:(19)  评论:(0)  加入收藏
被“摧毁”的数藏玩家:父母50万积蓄变电子垃圾,31岁程序员送外卖还网贷
最窘迫的时候,张晖把借款软件和信用卡都借了个遍,支付宝借呗16万的额度,他也全部用光了。真正压倒张晖的 ,还有一个他难以启齿的“秘密”:一年之内,父母50万的积蓄全部变成了数字...【详细内容】
2024-03-27  Search: 程序  点击:(22)  评论:(0)  加入收藏
新手蜘蛛池程序搭建->十种简单程序和方法
在互联网营销的世界里,搜索引擎优化(SEO)和内容营销是两个至关重要的组成部分。其中,蜘蛛池程序是一个强大的工具,可以帮助网站提高其在搜索引擎中的排名。本文将为你介绍如何...【详细内容】
2024-03-27  Search: 程序  点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: 程序  点击:(13)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(1)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(3)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(8)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(15)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(11)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(8)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(12)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(13)  评论:(0)  加入收藏
站内最新
站内热门
站内头条