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

ps做兼职在什么网站可以找到电视剧下载网站 免费糖醋蒜怎样做

ps做兼职在什么网站可以找到,电视剧下载网站 免费糖醋蒜怎样做,抖音代运营服务达不到退费标准,千万别学视觉传达设计静态链接的缺点#xff1a;生成的可执行文件体积较大#xff0c;当多个程序引用相同的公共代码时#xff0c;这些公共代码会多次加载到内存#xff0c;浪费内存资源。 为了解决这个问题#xff0c;动态链接对静态链接做了一些优化#xff1a;对一些公用的代码#xff0…静态链接的缺点生成的可执行文件体积较大当多个程序引用相同的公共代码时这些公共代码会多次加载到内存浪费内存资源。 为了解决这个问题动态链接对静态链接做了一些优化对一些公用的代码如库在链接期间暂不链接而是推迟到程序运行时再进行链接。这些在程序运行时才参与链接的库被称为动态链接库。程序运行时除了可执行文件这些动态链接库也要跟着一起加载到内存参与链接和重定位过程否则程序可能就会报未定义错误无法运行。 动态链接的好处是节省了内存资源加载到内存的动态链接库可以被多个运行的程序共享使用动态链接可以运行更大的程序、更多的程序升级也更加简单方便。 在 Windows 下解压一个软件安装包里面的 .dll 后缀的文件就是动态链接库需要和可执行文件一起安装到系统中。程序在运行前会首先把它们加载到内存链接成功后程序才能运行。 在 Linux 环境下动态库文件的后缀为 .so。 gcc -fPIC -shared add.c sub.c mul.c div.c -o libtest.so gcc main.c libtest.so cp libtest.so /usr/lib/ # 程序就可以运行了在上面的程序中可执行文件 a.out 是动态链接生成的所以在运行 a.out 之前libtest.so 这个动态链接库要放到 /lib、/usr/lib 等系统默认的库路径下否则 a.out 就会链接失败无法正常运行。 在 Linux 环境下当我们运行一个程序时操作系统首先会给程序 fork 一个子进程接着动态链接器被加载到内存操作系统将控制权交给动态链接器让动态链接器完成动态库的加载和重定位操作最后跳转到要运行的程序。 动态链接器本身也是一个动态库/lib/ld-linux.so文件动态链接器被加载到内存后会首先给自己重定位然后才能运行。像这种自己给自己重定位然后自动运行的行为一般称为自举。 动态链接器解析可执行文件中未确定的符号及需要链接的动态库信息将对应的动态库加载到内存并进行重定位操作。这个过程其实和静态链接的重定位过程一样只不过推迟到了运行阶段而已。重定位结束后程序中要引用的所有符号都有了地址和定位动态链接器将控制权交给要执行的程序跳转到该程序运行。 动态链接需要考虑的一个重要问题是加载地址。静态链接时加载地址等于链接地址这个地址是固定的。动态链接过程中类似静态链接的重定位动态链接库被加载到内存后目标文件的起始地址也发生了变化需要重定位。一个可执行文件对动态链接库的符号引用要等动态链接库加载到内存后地址才能确定然后对可执行文件中的这些符号修改即可。 main() 函数调用了 add() 函数但 add() 函数的地址还不能确定等到 libtest.so 加载到内存后add() 函数的地址才能确定下来。加载器通过动态链接、重定位操作更新了符号表中 add() 函数的实际地址并修正 main() 函数指令中引用 add() 函数的地址然后程序才可以正常运行。 这种装载时重定位的操作虽然解决了可执行文件中绝对地址的引用问题但也带来了另外一个问题对于每个进程动态库被加载到了内存的不同地址也只能被进程自身共享无法在多个进程间共享无法节省内存违背了动态库的设计初衷。如果有一种方法将动态库设计成无论放到哪里都可以执行而且可以被多个进程共享那么这个问题就迎刃而解了。 与地址无关的代码 如果想让我们的动态库放到内存的任何位置都可以运行都可以被多个进程共享一种比较好的方法是将我们的动态库设计成与地址无关的代码。将指令中需要修改的部分如绝对地址符号的引用分离出来剩余的部分就和地址无关了。需要被修改的指令符号和数据在每个进程中都有一个副本互不影响各自的运行。 编译代码时加上 -fPIC 参数Position-Independent Code就可以实现代码与地址无关把这段代码放在内存中的任何位置都无须重定位直接运行即可使用相对跳转指令代替对绝对地址的访问。 全局偏移表 在动态库的设计中对于模块内的符号相互引用通过相对寻址很容易实现代码与地址无关。但是当动态库作为第三方模块被不同的应用程序引用时库中的一些绝对地址符号如函数名将不可避免地被多次调用需要重定位。动态库中的这些绝对地址符号如何能做到同时被不同的应用程序引用呢 每个应用程序将引用的动态库绝对地址符号收集起来保存到一个表中这个表用来记录各个引用符号的地址。当程序在运行过程中需要引用这些符号时可以通过这个表查询各个符号的地址。这个表被称为全局偏移表Global Offset TableGOT。 在一个可执行文件中其引用的动态库中的绝对地址符号会被分离出来单独保存到 GOT 表中GOT 表以 section 的形式保存在可执行文件中这个表的地址在编译阶段已经确定了。当程序运行需要引用动态库中的函数时会将动态库加载到内存根据动态库被加载到内存中的具体地址更新 GOT 表中的各个符号函数的地址。等下次该符号被引用时程序可以直接跳到 GOT 表查询该符号的地址因为 GOT 表在可执行文件中的位置是固定不变的所以程序中访问 GOT 表的指令也是固定不变的唯一需要变化的是动态库加载到内存后库中的各个函数的位置确定在 GOT 表中实时更新各个符号在内存中的真实地址就可以了。 这样做的好处是在内存中只需要加载一份动态库当不同的程序运行时只要修改各自的 GOT 表它们引用的符号都可以指向同一份动态库。 延迟绑定 动态连接通过使用与地址无关这一技术加载到内存任意地址都可以运行。与地址无关这一技术在 ARM 平台可以使用相对寻址来实现。ARM 相对寻址的本质其实就是寄存器间接寻址只不过基址换成了 PC 而已访问效率还是比较低的包括程序运行之前的动态链接和重定位操作也会对程序的及时响应和性能造成一定的影响。可执行文件一般都采用延迟绑定程序在运行时并不急着把所有的动态库都加载到内存中并对它们进行重定位。当动态库中的函数第一次被调用时才会把用到的动态库加载到内存并进行重定位。 C 标准库起始就是以动态库的封装形式保存在 Linux 系统中的不同的应用程序都会调用 printf() 函数当它们在内存中运行时只需要加载一份 printf() 函数代码到内存就可以了。各个应用程序在引用 printf 这个符号时就会启动链接器将这份代码映射到各自进程的地址空间更新各自 GOT 表中 printf() 函数的实际地址然后通过查询 GOT 表找到 printf() 在内存中的实际地址就可通过间接访问跳转执行。 共享库 现在大多数软件都是采用动态链接的方式开发的不仅可以节省内存空间升级维护也比较方便。在发布软件包时可执行文件及其以来的动态链接共享库被一起打包发布如果你依赖的是系统默认自带的共享库如 C 标准库则不需要跟软件一起打包。程序安装时可执行文件会复制到 Linux 系统的默认路径下如 /bin、/sbin、/usr/bin、/usr/local/bin 等这些路径由环境变量 PATH 管理和维护。可执行文件依赖的共享库一般要放到库的默认路径下面如 /lib、/usr/lib 等。当程序运行时动态链接器首先被加载到内存运行动态链接器会分析可执行文件从可执行文件的 .dynamic 段中查询该程序运行需要依赖的动态共享库然后到库的默认路径下查找这些共享库加载到内存中并进行动态链接链接成功后将 CPU 的控制权交给可执行程序程序就可以正常运行了。 动态链接器在查找共享库的过程中除了到系统默认的路径下查找也会到用户指定的一些路径下去查找用户可以在 /etc/ld.so.conf 文件中添加自己的共享库路径。为了减少每次查找文件的时间消耗/etc/ld.so.conf 修改后可以使用 ldconfig 命令生成一个缓存 /etc/ld.so.cache 以提高查找效率。每当我们新增、删除或修改共享库的路径时使用 ldconfig 更新一下缓存就可以了。
http://www.dnsts.com.cn/news/12134.html

相关文章:

  • 巩义网站网站建设html网站自带字体怎么做
  • 漂亮企业网站企业课程培训
  • 网站建设前的分析公司概况了解注册公司网站流程
  • iis 做网站短视频万能素材库
  • 官方网站制作哪家专业wordpress2018
  • 极客网站建设网站怎么做png阴影
  • 最近几天的新闻大事在线seo短视频
  • 网站百度云链接揭阳市榕城区建设局网站
  • 校园网站建设的要素内蒙古建设协会网站
  • 销售网站内容设计wordpress_主题
  • 做网站毕业设计存在的问题wordpress自带功能
  • 长春seo公司长春网站设计吉安网站公司
  • 深圳网站建设李天亮桂林做网站的公司哪家最好
  • 云南省建设系统网站自己做发卡网站支付接口
  • 免费做网站推广快速搭建企业网站
  • 上海高端网站建设服承德网站建设制作
  • 网站定制联通卡如何提升顾客的体验和服务
  • 免费游戏链接入口九江网站建设优化公司
  • wordpress自动生成缩略图seo优化工程师
  • 咸宁有做网站的吗湘潭网站开发
  • 青岛高端网站建设网站的内容包括什么
  • 杭州网站建设洛洛科技公司网络营销推广方案
  • 网站分为深圳网站开发公司宝网
  • wordpress建站主机找别人网站开发没给我源代码
  • 网站建设时怎么购买空间怎样创立一个网站
  • 租房网站的财务分析表怎么做绍兴企业网站开发
  • 建设网站公司哪个好宁夏住房和城乡建设局网站
  • 网站开发验收单招商加盟类网站模板
  • 盗版电影网站建设成本手机网站程序下载
  • 网站建设找工作公司网站怎么做包括什么