理解计算机系统_简述链接

前言
       

        以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定

引入

        源代码在机器层面,是以指令存在的.指令包含了指令码和操作数.本书第7章的内容比较重要,但除了几个有用的gcc指令之外和程序员关系没那么大---他主要是由设计编译器的工程师完成的.链接可以看作是:"将源代码编译成机器代码"这个需求的实现.本章内容和学习一个api函数一样"无趣"----你需要记住他的一些指令应用,但又不知道是怎么来的.所以深入建议深入学习本章最好有编译原理方面的知识储备,否则了解即可.

         前面有个推导:在机器层面都是由地址来表示数据.这里做一个简单描述:

        1>源代码在机器层面以一串指令(如一个函数被编译成数条汇编指令)存在.

        2>指令和操作数(对应函数中的变量)都是二进制数表示的数据.每个数据包括了地址和数值两项.两个数据之间可以用指针"连接"起来(也可以设置多重指针).由指向某个地址的指针间接获得该地址里的数值.当指向某个地址时,被指向的地址开始的连续数据可以被访问.

        3>指针既能指向某片连续区域(函数),也能指向单个地址(变量).他的便捷性使其成为数据访问的首选.

链接

       链接的作用是将编程模块化,随时可以写函数加入到软件中并更新.

        有了上面的铺垫,链接可以用简单的几句话来概括:你是谁?你在哪里?

        链接核心内容:符号解析和重定位.符号对应高级语言中的全局函数和全局变量.

        符号解析对应"你是谁"?将某个符号放在内存中,程序中重复调用相同的函数,或者使用相同的变量,知道他们是指向同一个内存中的数据.

        重定位对应"你在哪里?"执行指令的时候,遇见符号,定位到内存中他所在的位置.

        指令的定位:

        符号需要重定位找到正确位置,指令似乎没提重定位.笔者理解是加载编译器后,指令集被固定在内存中的某个位置.程序计数器PC是指向指令序列首元素的指针.指令序列的每个元素放着指令的地址.当执行完一条后,PC指向下一条指令.

  思考

        从数据的表示,到指针的机制,再到"数据都以地址(指针)访问",这一整套内容,可以看作是一个系统的设计.所以可以从中抽象一些思考的模式,也就是说学习设计者的思想.

对编译的理解

        本章内容围绕着编译展开,会的人可以自己开发个编译系统,或者对现有编译器做修改以适应自定义需要.在整个软件开发(研发)环境中,是很重要的.不会也不用担心,有现成的工具集可用.

        笔者对编译的理解是:封装机器指令,写出将源代码转换成机器代码的工具集,并向使用者提供接口指令(类似gcc),---这就是编译器的开发需求.

         如果只是使用本章的内容,背几条gcc指令就可以了,还是比较简单的,或者用的时候再查.

小结

        简单总结了链接,当是10月24日这个"节日"冒个泡 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jllws1

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值