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

2023-11-03

前言

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

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

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

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

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

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

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

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

地址无关代码

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

其实大多数程序都是地址无关码,你只需要给他的一个值,他经过处理,返回一个值,就达到了我们的目的
在这里插入图片描述
对于所有链接的共享库来说,虽然我们使用的是同一段物理内存地址,但是在不用的应用程序中,虚拟地址是不同的

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态链接,程序内部的共享单车 的相关文章

  • (计算机组成原理)Cache和主存之间的映射方式

    地址映射变换机构是将CPU送来的主存地址转换为Cache地址 由于贮存和Cache的块大小相同 xff0c 块内地址都是相对于快的起始地址的偏移量 xff08 即低位地址相同 xff09 xff0c 因此地址变换主要是主存块号与Cache块
  • 计算机组成原理3(集中式总线判优控制、总线通信控制)

    文章目录 一 集中式总线判优控制1 链式查询方式2 计数器定时查询方式3 独立请求方式 二 总线通信控制1 概念解释2 四种通信方式 一 集中式总线判优控制 总线控制用来做什么的 xff1f 答 xff1a 总线判优控制解决多个部件同时申请
  • 位、字、字节的区别

    1 位和字节的关系 位 bit 比特 字节 Byte 拜特 1 Byte 8 bit 计算机内存中 最小的存储单位是 位 bit 8个 位 构成一个 字节 byte 字节是内存的基本单位 也是编址单位 例 某计算机的内存是2GB 指的就是该
  • 编译程序和解释程序有什么区别?

    1 编译程序和解释程序的区别 编译型是使用编译器编译后生成计算机硬件可直接执行的指令 解释型是在运行时才由解释器逐语句去执行 编译型代表 C C C Java 解释型代表 html javascript 区别有很多 说说常见的几个 编译型语
  • 5.6.1_浮点数的表示

    文章目录 一 引子 二 定点数的局限性 三 从科学计数法理解浮点数 1 十进制 2 二进制 1 定点数 2 浮点数 浮点数的表示 补充 练习 四 浮点数尾数的规格化 1 左规 1 十进制 2 二进制 2 右规 1 规则 2 例子 五 规格化
  • 计算机组成原理实验三-----系统总线和具有基本输入输出功能的总线接口实验

    总线是计算机中连接各个功能部件的纽带 是计算机各部件之间进行信息传输的公共通路 总线不只是一组简单的信号传输线 它还是一组协议 他有两大特征 分时 同一总线在同一时刻 只能有一个部件占领总线发送信息 其他部件要发送信息得在该 部件发送完释放
  • 第二章 计算机发展与应用

    计算机从诞生至今已经经历了多个阶段的发展 包括 1 电子管时代 1940年代 1950年代 计算机使用电子管作为主要的电子元件 这些计算机体积庞大 功耗大 但是它们标志着计算机的诞生 并且在二战期间被广泛应用于军事领域 2 晶体管时代 19
  • 2.4总线操作和定时

    文章目录 一 引子 二 介绍 1 总线周期 2 总线定时规范 三 同步定时方式 1 过程 2 特点 3 优缺点 优点 缺点 四 异步定时方式 1 介绍 2 三种方式 1 不互锁方式 2 半互锁方式 3 全互锁方式 3 优缺点 优点 缺点 五
  • 虚拟存储器

    文章目录 虚拟存储器 一 虚拟存储器概述 二 页式虚拟存储器 例题分析 三 段式与段页式虚拟存储器 虚拟存储器 一 虚拟存储器概述 1 引入原因 高速的主存容量满足不了要求 虚拟存储器 在操作系统及辅助硬件的管理下 由主存和大容量外存所构成
  • 浮点的加减计算方法

    浮点的计算方法 1 计算步骤 2 基本要素 2 1 浮点数 2 2 规格化浮点数 2 3 偏置指数 2 4 IEEE浮点数 2 5 特点 3 计算实例 4 舍入机制 扩展 乘除计算步骤 1 计算步骤 浮点数格式 单精度 符号位1位 阶码8位
  • 5.6.2_IEEE754

    文章目录 一 引子 二 移码 1 移码与补码 2 移码本身 1 127 2 3 3 偏置值 普通情况 特殊情况 三 IEEE 754标准 1 格式 2 类型 1 短浮点数 2 double型 3 案例 1 案例一 2 案例二 4 范围 1
  • 原码表示

    原码的本质 符号位 绝对值 我们下面分析的类型主要是分析纯小数和纯整数的情况 因为在计算机里面 实数是可以转换成下面这两种形式的 纯小数 纯整数 n 位二进制数来表示这个数的原码 符号位占一位 还剩 n 1 位数值位 n 1 位能表达的最大
  • 【计算机组成原理】(四)原码补码的加减乘除

    各种码的作用 模运算的性质 3 1 12 9 9 0 12 9 21 1 12 9 33 2 12 9 15 2 12 9 我们发现等号右边都是 9 相当于等号的左边的数除去12的余数都是9 那我们就说这几个等好左边的数 在mod12的情况
  • 计算机指令——从纸带说起

    前言 其实很多时候我都会感叹计算机的伟大 通过一个个电路就完成了如今各种系统 通过各种各样的语言就能够指挥设备完成不同的动作 当写下第一个hellow world的时候我就在想他什么怎么出现 今天搞明白其中的原理 我在这和大家分享 打孔卡
  • 计算机组成原理笔记03

    计算机组成原理笔记03 做题笔记1 内容 教材的思维导图 课后练习 计算部分 中国大学MOOC计算机组成原理 计算部分 1 教材的思维导图 在看题之前 最好先看这篇定点运算 写的特别清晰明了 2 课后练习 3 2 选择题 1 一个C语言程序
  • 补码除法运算(加减交替法)

    x 补 00 1000 除数y 补 11 0101 两个数是异号 因此使用x 补 y 补 11 1101 11 1101继续与y 补 对比 发现是同号 商上1 余数11 1101向左移动一位 再加上 y 补 结果为00 0101 余数00
  • 计算机中的指令跳转

    前言 在上一章中说了 高级语言为什么怎么样成为计算机能够读懂的语言 下面就来说说这些计算机能够读懂的语言中 他们究竟是如何设计的 CPU是如何执行指令的 在我们现实常用的CPU中 有几百亿的晶体管通过电路起来 在逻辑上我们可以认为CPU就是
  • 计算机组成原理--基于Logisim的汉字的表示的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的汉字的表示 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim
  • 面向对象编程是什么意思呢?汇总

    https blog csdn net qq 32381815 article details 79119996 面向对象思想 谈谈你对面向对象的理解 https blog csdn net qsbbl article details 71
  • 5.1 中央寄存器的原理和组成

    思维导图 中央处理器 CPU 核心原理与组成 引言 中央处理器 CPU 作为计算机的 大脑 在现代计算机硬件中扮演着至关重要的角色 本文旨在深入探讨CPU的基本原理和组成部分 为读者提供一个全面的理解 CPU的基本原理 1 信息处理 CPU

随机推荐

  • pycharm连接mysql8.0报错

    为了pycharm方便远程连接 偷懒未创建用户 直接修改root进行远程连接 但是修改完成之后 在使用pycharm连接数据库出现报错 RuntimeError cryptography is required for sha256 pas
  • Xcode error: Cannot link directly with dylib/framework, your binary is not an allowed client of /

    文章目录 编译报错 Trust App 编译报错 Mac 机子 数据线连接 iPhone13 通过 Appium 里的 appium webdriveragent WebDriverAgent xcodeproj 工程 来编译可以在 iPh
  • python实验(3)

    按公式s 12 22 32 n2 求累计加和 s不超过1000的最大项数n 程序运行结果如下所示 x 1 count 0 print x gt sum for x in range 0 14 count x x print str x gt
  • golang笔记-区块链密码学01

    文章目录 pbkdf2 Key 生成秘钥函数 HMAC 生成摘要算法 PrivKeyFromBytes 创建私钥 公钥对 pbkdf2 Key 生成秘钥函数 PBKDF2 Password Based Key Derivation Func
  • markdown图片显示

    目录 markdown中图片显示 图片显示方法 图片显示的格式 注意 绝对路径与相对路径 绝对路径 相对路径 markdown中图片显示 图片显示方法 网页图片 先将图片上传到服务器 可以支持多用户查看分享之后不会出现图片无法加载的情况 本
  • SaaS软件能保证数据安全吗?

    SaaS软件能保证数据安全吗 本文将要尝试从各个方面尽可能客观的去阐述这个问题 而不是简单自嗨式的说简道云平台如何保障数据安全 建议先收藏起来慢慢品 01 SaaS安全到底是什么 定义解读 本文所用SaaS平台 gt gt gt gt ht
  • Java如何使用SAX(Simple API for XML)解析XML呢?

    转自 Java如何使用SAX Simple API for XML 解析XML呢 下文讲述使用SAX解析xml文档的方法分享 如下所示 SAX简介 SAX用于加载文档到内存中 它是采用事件驱动的API Observer模式 他按照xml文件
  • 微软customvision在线图片分类器使用

    参考 https zhuanlan zhihu com p 28820161 customvision官网 https www customvision ai 注册了可以自己建立新项目 创建自己需要的图片分类器 训练好模型后可以调用api进
  • Linux+设计模式

    目录标题 Linux常用命令 常用的50个 服务器文件复制 查看端口占用 查看进程信息 内存占用率 Linux的管道原理 孤儿进程 僵尸进程 观察者模式 Linux常用命令 常用的50个 linux常用命令 50个 服务器文件复制 使用sc
  • 明尼苏达量表结果分析_明尼苏达多项人格测验(MMPI) 结果分析

    展开全部 MMPI测试 量表简介 俗称心理CT 对心32313133353236313431303231363533e78988e69d8331333238666363理健康和心理素质进行比较全面的测量 是正常人和心理障碍者都可以使用的心理
  • 架构制图--工具与方法论

    简介 软件工程也是工程 因此传统工程制图的一些基本理论 在软件行业同样适用 但另一方面 软件与实体制造业之间还是有着本质区别 所以在制图方面的需求和方式也大相径庭 无法直接套用 作为软件行业的从业者 你可以完全不懂工程制图 但你不得不懂架构
  • 程序员在国企的六年

    第一年 第二年 第三年 第四年 第五年 第六年 行了 我要接着写代码了
  • PHP自学---黑马程序员笔记【持续更新】

    视频 https www bilibili com video BV18x411H7qD p 3 目录 基础 1 静态网站访问原理 2 动态网站访问 3 C S B S 4 MySQL访问流程 5 PHP连接MySQL数据库 6 配置虚拟主
  • 多智能体强化学习基础知识(入门级)

    参考资料 王树森 深度强化学习 https github com wangshusen DRL
  • 使用python计算出矩形的面积

    w 4 h 5 print width w height h area area w h
  • mac如何创建mysql数据库

    使用mac创建mysql数据库十分简单 我们只需要按照以下步骤即可完成 首先 我们需要安装mysql 我们可以通过官网下载对应的安装包 或者通过Homebrew进行安装 接下来 我们需要启动mysql服务 在终端中输入以下命令 sudo m
  • 在钉钉上怎么手写_胖·评测|亲测!磐度A5数字纸笔手写板能适配多少直播平台?...

    停课不停学 各大科技企业纷纷推出各类教学平台吗 一时之间可谓百家争鸣 但是对于一线教师而言 除了为可怕的直播拥堵与繁琐的直播操作而头痛之外 一个更可怕的事实出现了 解题答疑 没有趁手的好工具怎么搞定各类公式 解题步骤的书写啊 胖胖老师今天就
  • 关于win10启动ubuntu报错

    关于win10启动ubuntu报错 错误类型 参考的对象类型不支持尝试的操作 问题描述 win10启动ubuntu报错 参考的对象类型不支持尝试的操作 解决方法 以管理员身份打开Windows PowerShell 然后执行netsh wi
  • 【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献 1 概述 文献来源 本文综述了连续非线性动力系统噪
  • 动态链接,程序内部的共享单车

    前言 在之前说过 程序的编译过程是 编译 汇编 链接 前面的两种方式我们已经充分的理解过了 现在我们来说说我们的链接过程 我们很多时候要做到代码的复用 我们就需要链接不同的库 这么来说 我们链接的过程就有点像生活中标准化 模块化的生产 我们