动态链接,程序内部的共享单车

Posted 东东7_7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态链接,程序内部的共享单车相关的知识,希望对你有一定的参考价值。

前言

在之前说过,程序的编译过程是,编译,汇编,链接,前面的两种方式我们已经充分的理解过了,现在我们来说说我们的链接过程,我们很多时候要做到代码的复用,我们就需要链接不同的库。

这么来说,我们链接的过程就有点像生活中标准化,模块化的生产,我们通过工厂去生产一致的螺帽,最后通过链接去直接使用他们即可

但是,这其中有一个问题就是我们不能为了每一个程序都将零件给他装上,这样实在是太费内存了,就像我们在公路上一样,我们都有出行的需要,但要是给每一个人都配一辆自行车的话,就显得太过拥挤了。

动、静链接,共享运行来省内存

在上面一篇文章我们使用内存交换,虚拟内存,分页的方式解决了内存转载的问题,其中很多就是因为内存空间不够的原因,所以我们在想,能不能通过一种方式,可以将重复的代码,只在用的时候加载到内存中去。就好比我们的共享单车,我们在需要使用的时候去路边扫码就好了,而不是一直带个自行车在身边

人们根据这个思路就推出了一个新想法,就是动态链接,相应的,我们之前执行代码的方式是静态链接

这里,我们链接的不是放在硬盘上的库代码,而是加载到内存中的共享库中。在使用的时候去共享的库中取东西

这个加载到内存中的共享库会被多个程序调用到,在windows下这些文件为.dll文件,也就是 Dynamic-Link Libary(DLL,动态链接库)。在 Linux 下,这些共享库文件就是.so 文件,也就是 Shared Object(一般我们也称之为动态链接库)。这两大操作系统下的文件名后缀,一个用了“动态链接”的意思,另一个用了“共享”的意思,正好覆盖了两方面的含义。

地址无关代码

我们知道,一个函数要运行,必须要有函数的入口地址,在一些特定的函数中,我们需要他在固定的地址,才能运行,比如我们使用的main函数,他就是操作系统规定的一个固定地址,其他地址不行。而地址无关地址则是不管在哪里都能运行,我们编译出来的共享库就是地址无关码

其实大多数程序都是地址无关码,你只需要给他的一个值,他经过处理,返回一个值,就达到了我们的目的

对于所有链接的共享库来说,虽然我们使用的是同一段物理内存地址,但是在不用的应用程序中,虚拟地址是不同的

那么我们怎么让编译出来的都为地址无关码呢,我们通常使用的为相对地址,各种指令的相对与当前的偏移量即可

以上是关于动态链接,程序内部的共享单车的主要内容,如果未能解决你的问题,请参考以下文章

深入计算机组成原理动态链接:程序内部的”共享单车“

智能物联网之共享单车智能锁是如何接入云端的

共享单车的锁是啥原理?共享单车的利弊都有哪些?

系统分析与设计-第七次作业

系统分析与设计-第七次作业

共享单车微信小程序