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

2023-11-03

前言

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

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

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

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

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

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

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

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

地址无关代码

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

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

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

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

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

  • 计算机组成原理

    文章目录 第一章 计算机的基本组成第二章 计算机的发展及应用第三章 计算机的系统总线第四章 存储器第五章 输入输出系统第六章 数字第七章 CPU指令第八章 CPU结构和功能第九章 控制单元的功能第十章 控制单元的设计 第一章 计算机的基本组
  • Quartus II 13.0波形仿真

    先放结论 Quartus II 13 0有自带的仿真工具 能实现波形仿真 之前一直找不到关于Quartus II 13 0的波形仿真 然后百度的都是说quartus ii 9 0之后的版本就没有这个功能了 只能再下一个modelsim之类的
  • 计算机组成原理期末总结

    文章目录 写在前面 1 计算机系统概论 知识点 习题 2 运算方法和运算器 知识点 习题 3 多层次的存储器 知识点 习题 4 指令系统 知识点 习题 5 中央处理器 知识点 习题 6 总线系统 知识点 习题 7 外存与IO设备 知识点 习
  • 浮点的加减计算方法

    浮点的计算方法 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
  • 软件架构设计---软件架构视图

    软件架构视图 从软件架构本身的特点出发讨论了架构建模及与特定应用领域密切相关的架构风格 本节将从对架构编档的角度对软件架构视图及其风格进行讨论 1 软件视图的分类 现代软件系统非常复杂 通常在某个具体的时间内只需将注意力集中在某几个结构上
  • 计算机组成原理笔记01

    做题笔记1 学习内容 教材的思维导图 课后练习 计算部分 中国大学MOOC计算机组成原理 计算部分 1 教材的思维导图 2 课后练习P17 7 某计算机主频为1 2GHz 其指令分为4类 它们在基准程序中所占比例及CPI如表1 7所示 指令
  • 5.5_数据的存储和排列

    文章目录 一 大小端模式 二 边界对齐 在这个小结中 我们要探讨的是 数据的存储和排列 一 大小端模式 首先来看一个之前提到过的问题 叫做大小端模式 我们在内存里经常会存储某一些多字节的数据 比如 c 语言里的 Int 型变量 在很多时候占
  • 【计算机组成原理】——原码,反码,补码,移码怎样计算

    机器数与真值 把符号 数字化 的数称为机器数 而把带 或 的数称为真值 正负号用二进制的0 1表示 0 1 x 001 机器数 第一位表示符号 x 1 x 101 真值 直接用 表示 x 5 原码 反码 补码 移码的计算 正数的原码 反码
  • 同步通讯和异步通讯(简单理解)

    同步通信和异步通信 简单理解 注 本篇文章只是告诉你什么是同步通信 什么是异步通信 即使没有计算机基础的同学也适合阅读 同时也能帮助计算机专业同学更好理解这个知识点 但是如果想深入学习 还需自己翻阅资料 一 电脑完成一个读命令需要的步骤 主
  • 计算机中的指令跳转

    前言 在上一章中说了 高级语言为什么怎么样成为计算机能够读懂的语言 下面就来说说这些计算机能够读懂的语言中 他们究竟是如何设计的 CPU是如何执行指令的 在我们现实常用的CPU中 有几百亿的晶体管通过电路起来 在逻辑上我们可以认为CPU就是
  • 【计组笔记-5】详细测试c++中类型转换的溢出截断处理

    计组笔记 5 详细测试c 中类型转换的溢出截断处理 1 将小数赋值给float 2 将整数赋值给float 3 将整数赋值给int 3 1 算术溢出 3 2 非算术溢出 等于32位 3 3 非算术溢出 大于32位 4 将小数赋值给int 5
  • 浮点数

    为什么要有浮点数 从十进制科学计数法理解浮点数 计算机中二进制的浮点数 二进制中阶码的底也可以不为2 例如 二进制中阶码的底可以为4 为8等等 当阶码的底为2 假设阶码为 1 则小数点需要后移一位 即算数左移一位 当阶码的底为4时 假设阶码
  • CPU时钟周期、主频、CPI、MIPS

    主频 理解 主频是机器内部主时钟的频率 主频越高 完成指令的一个执行步骤所用的时间就越短 速度越快 比如跳绳 跳的越快 即频率越高 那么完成一次所用的时间就越短 单位 Hz 常见的有1 8GHz 2 4GHz CPU时钟周期 理解 跟上面的
  • 计算机组成原理期末复习【超实用】

    计算机组成原理 第二版 唐朔飞 编著 课本有些地方还不错 可以下载电子版看看 b站2小时讲解链接 https www bilibili com video BV1x4411q7Fz 初次录讲解视频 各种差错和画音不同步请各位谅解 我录到后面
  • 第一章 计算机系统概论

    一 计算机系统简介 1 计算机软硬件概念 计算机是一种能够执行指令的电子设备 它由硬件和软件两部分组成 计算机硬件是指计算机系统中的物理组件 包括中央处理器 CPU 内存 硬盘 输入设备 如键盘 鼠标 输出设备 如显示器 打印机 等 这些硬
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 计算机组成原理——数制与编码

    1 在以下编码中 零的表示唯一的是 C A 反码 B 原码 C 补码 D 原码和移码 2 假设某数的真值为 100 1010B 在计算机内部表示为1011 0110B 该数采用的编码为 D A 移码 B 原码 C 反码 D 补码 3 考虑以
  • 计算机组成原理综合1

    1 完整的 计算机系统 应包括 D A 运算器 存储器和控制器 B 外部设备和主机 C 主机和实用程序 D 配套的硬件设备和软件系统 2 计算机系统中的存储器系统是指 D A RAM存储器 B ROM存储器 C 主存储器 D 主存储器和外存
  • 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 概述 文献来源 本文综述了连续非线性动力系统噪
  • 动态链接,程序内部的共享单车

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