当前位置: 首页 > news >正文

南昌做网站的公司哪家好做网页和网站一样吗

南昌做网站的公司哪家好,做网页和网站一样吗,ai设计,网站建设合同包含什么程序的编译和链接程序的编译和链接程序的两种环境翻译环境详解编译和链接预处理编译汇编链接运行环境程序的编译和链接 程序的两种环境 在ANSI C的任何一种实现中#xff0c;存在两个不同的环境。 第1种是翻译环境#xff0c;在这个环境中源代码被转换为可执行的机器指令。 … 程序的编译和链接程序的编译和链接程序的两种环境翻译环境详解编译和链接预处理编译汇编链接运行环境程序的编译和链接 程序的两种环境 在ANSI C的任何一种实现中存在两个不同的环境。 第1种是翻译环境在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境它用于实际执行代码 翻译环境 平时我们写的程序都是一个个的源文件那么这些文件是怎么生成.exe可执行文件的呢这就是接下来我们要详细研究的内容 笼统的来讲大致过程可以用下图来表示 组成一个程序的每个源文件通过编译过程分别转换成目标代码object code。 每个目标文件由链接器linker捆绑在一起形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数而且它可以搜索程序员个人的程序库将其需要的函数也链接到程序中。 详解编译和链接 编译其实严格来说应该叫做翻译因为翻译其实还分多个步骤分别为预处理编译汇编。在VS中每一步骤是观察不到的所以我们使用GCC编译器来观察现象研究清楚每个步骤都是做什么的。 预处理 可以看到我这里有一个test.c文件里面写了这样一段代码这时候我们来看一下对它进行编译的第1步预处理究竟做了些什么事情我们用GCC来执行下面的指令 gcc test.c -E test.i这句指令意思就是将编译test.c到预处理那步就停下来并将所编译的信息重定向到test.i中然后我们打开test.i看一下 实际上已经不存在什么定义的宏了而是直接被替换另外还值得注意的是原本只有十几行的代码经过预处理之后变成了850行可以看到预处理做的事情其实还是蛮多的但是重点我们就是来观察一下现象知道预处理这步到底做了些什么就可以了所谓预处理就是对一些文本进行操作, 总结如下 1.#include 头文件的包含 2.#define 宏替换 3.删除注释 都是一些对文本的操作 编译 有了第一步的经验我们可以来看一下编译的步骤指令如下 gcc test.i -S test.s可以发现我们的代码变成了汇编语言这就是一个重要的步骤其实翻译成汇编语言之外还有语义分析语法分析等等你的一些语法错误等等就是这一步检查出来的另外还有一个很重要的步骤是进行符号汇总为什么说它重要呢其实是为下一步生成符号表做准备。下一步再说总结编译步骤 编译 1.语法分析 2.语义分析 3.符号汇总 4.翻译成汇编语言 等等 汇编 同样的操作 gcc test.s -c test.o好的这下彻底看不懂了实际上这是因为编译之后的目标文件其实是二进制文件是无法识别的但是这种类型的文件有它自己的格式叫做elf有个工具readelf是可以看这种类型的文件的具体内容的这种文件内容实际上也是有特点都是一段一段的每一段放不同的信息。我们先说汇编这步做了一些什么事情 汇编 1.翻译成二进制 2.生成符号表 我们用readelf这个工具要看关注的也就是这个符号表来了解一下 可以看到是有一堆选项我们要用的就是-s这个选项来看这个符号表 这个就是我们汇编这步生成的符号表这个符号表存储了文件中符号的信息之前我们的示意图中已经说了我们的源文件是有多个的每个文件里面的函数变量当然也是多个的那最后我们链接起来怎么找到这些符号呢靠的就是这个符号表它会记录下每个符号的信息函数变量它们的地址等等在后面的链接这步中按照这个符号表来寻找。 链接 我相信很多人可能早就听过链接就是将本地多个源文件组合起来并且引入一些外部的库等等但是对它到底这个步骤是怎么实现的并不清楚 今天就来研究清楚先说链接这个步骤到底做了什么 链接 1.合并段表 2.符号表的合并和重定位 段表这个今天先暂时不讨论到后期才能彻底理解 段表概念在分段式存储管理系统中每个进程或程序都有一个或多个逻辑段为使程序或称进程能正常运行亦即能从物理内存中找出每个逻辑段所对应的位置在系统中为每个进程建立一张段映射表简称段表段表记录了进程中每一个段在内存中的起始地址(又称为 “基址” )、段号和段的长度。 重点还是上面的符号表符号表合并和重定位是什么意思呢 举个例子 像是这个例子就能简单的描述一下符号表的问题我们知道每个文件最后都会生成一个目标文件所以每个源文件的目标文件中都有一张符号表我们就需要信息合并当test.c文件中安装符号表去找Add函数时发现找不到(其实这时候Add的地址是个无效地址)所以就会报出了错误LNK的错误一定是链接时发生的错误无法解析的外部符号就是根据符号表中的信息去找Add这个符号找不到。 如果add.c中将函数名改成正确的Add在链接时符号表合并就会将add.c中Add函数的地址重定向到合并之后的符号表中这样才能够顺序执行。 如果当我们把test.c中的声明去掉代码也是可以很好的跑起来的编译器仅仅是报个警告为什么呢我想应该就很容易理解了即使你没有声明但是在最后符号表合并的时候依旧是很好的进行了合并。所以最后的结果是没有一点问题的。 运行环境 程序执行的过程 程序必须载入内存中。在有操作系统的环境中一般这个由操作系统完成。在独立的环境中程序的载入必须由手工安排也可能是通过可执行代码置入只读内存来完成。 程序的执行便开始。接着便调用main函数。 开始执行程序代码。这个时候程序将使用一个运行时堆栈stack存储函数的局部变量和返回地址。程序同时也可以使用静态static内存存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。 终止程序。正常终止main函数也有可能是意外终止。
http://www.w-s-a.com/news/310414/

相关文章:

  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化
  • 北京建设银行纪念钞预定官方网站wordpress中文优化版
  • 宝安做棋牌网站建设找哪家效益快创意设计师个人网站
  • 做线上网站需要多少钱系统开发板价格
  • 建筑企业登录哪个网站wordpress feed地址
  • 网站建设流程百科提升seo搜索排名
  • 杭州网站建设 巴零做销售怎么和客户聊天
  • 北京自己怎样做网站wordpress oauth2插件
  • 上海800做网站wordpress建站的好处
  • 婚纱摄影网站设计模板如何做好网站内容
  • cdn网站加速招商计划书模板ppt
  • 我在某网站网站做代理开发小程序外包
  • 设计网站国外商城网站的建设费用
  • 网站开发工作需要什么专业学做网站游戏教程
  • 电子商务网站规划 分析 设计杭州网站优化平台
  • 汕头企业自助建站系统网站后台登陆验证码无法显示
  • 宁波网站制作服务做外贸推广自己网站
  • php 微信 网站开发青岛网站互联网公司
  • 网站软件免费下载大全网站建设开发价格高吗
  • asp网站制作软件上海做网站制作
  • 福田区住房和建设局网站好搜搜索引擎