首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux】动态库与静态库底层比较

将我们程序进行静态链接,这就要求我们链接任何库都要通过对应静态库版本!!! 一般我们操作系统都是动态库 并且在对.o文件打包时候: 静态库使用ar -rc 文件名......但是对应方法并没有在可执行程序中,所以动态库是怎样被调用呢?又是什么时候被调用呢? 动态库也会写入到内存中,并通过页表映射到地址空间中共享区。让调用时候通过共享区来找到对应方法实现。...我们之间看源代码不用加载运行,就可以想象着一步一步运行我们程序! 我们介绍一下ELF格式程序,二进制是有自己固定格式,elf可执行程序头部储存这可执行程序属性!...首先,库虚拟地址储存在共享区 在磁盘中,动态库编址是平坦模式编址,其地址0x1234就像是距离0000...一个偏移量 然后在共享区里,这个偏移量是没有改变1 所以想要执行库函数,就直接到共享区通过库起始地址...动态库是由操作系统来管理,所以就要有对应描述结构体!!!所以使用时候,想要知道有没有加载,就可以通过库名称来找到对应描述结构体,来查看是否被加载!!!

21910

Linux 进程、线程、文件描述符底层原理

说到进程,恐怕面试中最常见问题就是线程和进程关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。...Linux进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...为什么说 Linux 中线程和进程基本没有区别呢,因为从 Linux 内核角度来看,并没有把线程和进程区别对待。...当然,必须要说明是,只有 Linux 系统将线程看做共享数据进程,不对其做特殊看待,其他很多操作系统是对线程和进程区别对待,线程有其特有的数据结构,我个人认为不如 Linux 这种设计简洁,增加了系统复杂度...在 Linux 中新建线程和进程效率都是很高,对于新建进程时内存区域拷贝问题,Linux 采用了 copy-on-write 策略优化,也就是并不真正复制父进程内存空间,而是等到需要写操作时才去复制

1.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 进程、线程、文件描述符底层原理

    说到进程,恐怕面试中最常见问题就是线程和进程关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。...Linux进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...为什么说 Linux 中线程和进程基本没有区别呢,因为从 Linux 内核角度来看,并没有把线程和进程区别对待。...当然,必须要说明是,只有 Linux 系统将线程看做共享数据进程,不对其做特殊看待,其他很多操作系统是对线程和进程区别对待,线程有其特有的数据结构,我个人认为不如 Linux 这种设计简洁,增加了系统复杂度...在 Linux 中新建线程和进程效率都是很高,对于新建进程时内存区域拷贝问题,Linux 采用了 copy-on-write 策略优化,也就是并不真正复制父进程内存空间,而是等到需要写操作时才去复制

    2.5K30

    罗玉平: 关于ARM Linux原子操作底层支持

    来源:Linux阅码场, 罗玉平原创,欢迎投稿原创文章(要求投稿前未在任何平台发表),稿费500元人民币。...投稿邮箱:21cnbao@gmail.com 作者简介: 罗玉平, IT行业工作近20年,先后从事无线通讯,linux平台和firmware开发多年,目前从事ARMv8-A架构和CPU软件客户支持和培训工作...引子 前文宝华《宋宝华:关于ARM Linux原子操作实现》谈到软件如何使用ARM V7之后LDREX和STREX指令来实现spin lock和atomic 函数,这篇文章接着探讨ARM架构和总线协议如何来支持...fill和line eviction和正常读写操作产生外部行为是一样。...例如, 假如某个SOC不支持外部global exclusivemonitor,软件把MMU disabled情况下,启动SMP Linux,系统是没法启动起来,在spinlock处会挂掉。

    3.3K20

    threadlocal底层实现_ioc底层实现原理

    大家好,又见面了,我是你们朋友全栈君。...ThreadLocal 作用: 提供线程内局部变量,不同线程之间不会相互干扰,这种变量在线程生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递复杂性。...---- 各种引用用途: 强引用:最常用一种引用 软引用:适合做缓存,比如内存中一张图片,当内存不够用时候先把图片移动出去,当内存充足时候再把图片load进来 弱引用:为了解决某些地方内存泄露问题...,当DirectByteBuffer回收后,会通知队列,这时候JVM垃圾回收器就知道去系统内存请理相应系统内存空间 ---- ThreadLocal底层: 每个ThreadLocal对应一个ThreadLocalMap...,如果一个对象只有弱引用时候,那当垃圾回收器遇见他时候它就会被回收。

    63720

    Mysql专栏 - Linux底层交互和Raid存储架构

    Mysql专栏 - Linux底层交互和Raid存储架构 前言 在专栏之前几篇文章中,我们总结了缓冲池,缓存页,redo log,undo log,以及数据页和数据行在底层是如何进行存储,后续介绍了表空间...这一节比较特殊,讲述是和Linux有关交互原理,因为多数mysql都是部署在linux服务器上面,本节会简单介绍一下linux是如何处理mysql请求,以及linux系统会带来哪些问题 概述...为了IO性能,这里需要了解两个重要性能指标:「IOPS」和「响应延迟」。IOPS 指的是存储系统每秒可以执行多少次磁盘读写操作,底层磁盘支持每秒执行1000个随机读写和200个差距是很大。...: mysql和linux交互步骤: 下面是mysql和llinux交互大致流程: VFS层:当mysql发起一次数据页随机读写,一次redo log顺序读写时候,实际上会把io请求交给linux...最终 MySQL可以得到本次IO读写操作结果,最终结构图如下所示: linux底层调度流程 ERROR 1040(HY000): Too many connections问题 下面补充一个比较常见

    83920

    OC底层探索01-找到底层探索钥匙OC底层探索01-找到底层探索钥匙

    作为一位iOS开发者,如何才能开启自己底层探索之路呢?每当点击系统API无法跟进实现只能浅尝辄止时候,有没有想过怎样才能看到底层源码真容,而不是在还没开始就结束了呢?...本文中会提供三种方式来一探底层魅力。 Apple小心思 这句代码应该非常熟悉了吧?可是想知道alloc具体是如何实现对象创建呢?...没有注释,也再无法跟进,显然Apple不想让你看到底层是如何实现?可是这样就放弃了吗?...三种源码探索方式: 使用Xcode提供符号断点方式 使用Xcode提供分步调试方式 通过汇编方式 下面就这三种方式一一说明: 1. 符号断点 第一步: 添加符号断点 ?...分步调试 如果在你增加了对应API符号断点还是无法精确找到源码库名时候,第一种方式就不够用了。 第一步:为自己输入代码增加断点,run后等待断点触发 这一步与之前操作相同。

    44120

    Linux底层函数库glibc漏洞核查整改指引

    一、 漏洞概要 近日,Linux底层函数glibc DNS 客户端解析器被发现存在基于栈缓冲区溢出漏洞。...三、 漏洞影响范围 所有Debian系列、 Red Hat 系列 Linux 发行版中glibc版本大于 2.9 均受该漏洞影响,低于2.9有可能受此漏洞影响。...在linux命令行“输入”glibc库名称(如,libc.so.6),就像命令一样执行。   ...输出结果会显示更多关于glibc库详细信息,包括glibc版本以及使用GNU编译器,也提供了glibc扩展信息。glibc变量位置取决于Linux版本和处理器架构。   ...在基于Debian64位系统上:   $ /lib/x86_64-linux-gnu/libc.so.6   在基于Debian32位系统上:   $ /lib/i386-linux-gnu/libc.so

    1.3K60

    Linux底层函数库glibc漏洞核查整改指引

    一、 漏洞概要 近日,Linux底层函数glibc DNS 客户端解析器被发现存在基于栈缓冲区溢出漏洞。...三、 漏洞影响范围 所有Debian系列、 Red Hat 系列 Linux 发行版中glibc版本大于 2.9 均受该漏洞影响,低于2.9有可能受此漏洞影响。...在linux命令行“输入”glibc库名称(如,libc.so.6),就像命令一样执行。   ...输出结果会显示更多关于glibc库详细信息,包括glibc版本以及使用GNU编译器,也提供了glibc扩展信息。glibc变量位置取决于Linux版本和处理器架构。   ...在基于Debian64位系统上: $ /lib/x86_64-linux-gnu/libc.so.6   在基于Debian32位系统上: $ /lib/i386-linux-gnu/libc.so

    2K20

    Linux 底层原理」理解进程内存布局,掌握程序动态

    它们是一部分内核数据在用户空间映射,为了提高应用性能而创建。在《攻克 Linux 系统编程》中,我们再专门详细讨论。...深入理解了这些底层行为细节,就可以顺理成章地理解 fork() 一些行为表现和正确使用规范,无需死记硬背,也可获得一些别人踩过坑后才能获得经验。...03 监控子进程状态 在 Linux 应用中,父进程需要监控其创建所有子进程退出状态,可以通过如下几个系统调用来实现。...本文要重点讨论是:即使父进程在业务逻辑上不关心子进程终止状态,也需要使用 wait 类系统调用底层原因。...对这些底层实现细节充分理解,能帮助读者更好地理解各个系统调用行为表现,并根据具体应用需求选择正确、合适实现方案。

    2K30

    weak底层原理

    我们经常会使用weak来解决OC中循环引用问题,因为weak不会使引用计数加1;并且weak修饰指针还会在对象被销毁后自动置空,这有效解决了野指针调用问题。...那么weak 底层原理是怎样呢?我们接下来就来分析一下。 首先随便在一个工程中,写入下面类似的代码,然后在weak那行打断点: ? 运行到断点处,转成汇编分析: ?...在最后,可以通过存储这个弱指针地址找到其指向弱指针,然后将弱指针置空。...3.1 weak_table_t 先来看看weak_table_t底层代码: /** * The global weak references table....到这里位置,我们实际上就已经介绍完了【对一个对象做weak操作时候底层所做事情】: 首先,会有一张SideTable散列表,这个散列表包含了引用计数表、弱引用表等; 然后,散列表里面会有一张全局弱引用表

    97332

    TCPIP底层队列

    自从上次学习了TCP/IP拥塞控制算法后,我越发想要更加深入了解TCP/IP一些底层原理,搜索了很多网络上资料,看到了陶辉大神关于高性能网络编程专栏,收益颇多。...为什么不能阻塞读取网络信息IO线程呢?这里就要从经典网络C10K开始理解,服务器如何支持并发1万请求。C10K根源在于网络IO模型。...Linux 中网络处理都用同步阻塞方式,也就是每个请求都分配一个进程或者线程,那么要支持1万并发,难道就要使用1万个线程处理请求嘛?这1万个线程调度、上下文切换乃至它们占用内存,都会成为瓶颈。...用户调用recv接收阻塞socket上报文,该socketSO_RCVLOWAT值大于第一个报文大小,并且用户分配了足够大长度为len内存。...p-gzmjmmna-dn.html https://blog.csdn.net/russell_tao/article/details/9950615 https://ylgrgyq.github.io/2017/08/01/linux-receive-packet

    1.4K51

    threadlocal底层实现_什么是底层

    ThreadLocal 作用: 提供线程内局部变量,不同线程之间不会相互干扰,这种变量在线程生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递复杂性。...,用来指向对外内存(操作系统管理内存),操作系统管理内存JVM垃圾处理器不能回收,所以当DirectByteBuffer回收后,会在队列中有相应记录,之后JVM会去处理对外内存。...---- 各种引用用途: 强引用:最常用一种引用 软引用:适合做缓存,比如内存中一张图片,当内存不够用时候先把图片移动出去,当内存充足时候再把图片load进来 弱引用:为了解决某些地方内存泄露问题...,当DirectByteBuffer回收后,会通知队列,这时候JVM垃圾回收器就知道去系统内存请理相应系统内存空间 ---- ThreadLocal底层: 每个ThreadLocal对应一个ThreadLocalMap...,如果一个对象只有弱引用时候,那当垃圾回收器遇见他时候它就会被回收。

    52040

    【图片+代码】:Linux 动态链接过程中【重定位】底层原理

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 目录 动态链接要解决什么问题?...在上一篇文章中,我们一起学习了Linux系统中 GCC编译器在编译可执行程序时,静态链接过程中是如何进行符号重定位。 为了完整性,我们这篇文章来一起探索一下:动态链接过程中是如何进行符号重定位。...解决这个矛盾方案,就是Linux系统中动态链接器核心工作! 解决矛盾:增加一层间接性 David Wheeler有一句名言:“计算机科学中大多数问题,都可以通过增加一层间接性来解决。”...动态库加载过程 动态链接器加载动态库 当执行main程序时候,操作系统首先把main加载到内存,然后通过.interp段信息来查看该文件依赖哪些动态库: 上图中字符串/lib/ld-linux.so...ld-linux.so.2也是一个动态链接库,在大部分情况下动态链接库已经被加载到内存中了(动态链接库就是为了共享),操作系统此时只需要把动态链接库所在物理内存,映射到 main进程虚拟地址空间中就可以了

    2.3K11

    鸿蒙开发者必修课:Linux底层IO方式深度剖析 ‍

    鸿蒙开发者必修课:Linux底层IO方式深度剖析 ‍ 摘要 在这篇博客中,我们将探讨Linux底层几种IO(输入/输出)方式,为鸿蒙开发者提供一个清晰理解。...关键词:鸿蒙OS、Linux、IO模型、阻塞非阻塞、IO多路复用、性能优化。 引言 对于鸿蒙开发者来说,深入理解Linux底层IO方式不仅有助于优化应用性能,还能在面对复杂场景时更加得心应手。...本文将一一解析Linux IO模型核心机制及其在鸿蒙开发中应用价值。...底层五种IO模型及其在鸿蒙开发中应用。...IO流 网络应用 信号驱动IO 接收IO准备信号 及时响应IO 设备状态变化 异步IO IO操作真正完成返回 长耗时IO操作 大文件/网络通信 总结 了解和掌握Linux底层不同IO模型对于鸿蒙开发者来说是至关重要

    17410

    Linux】多线程安全之道:互斥、加锁技术与底层原理

    1.线程互斥 1.1.进程线程间互斥相关背景概念 临界资源:多线程执行流共享资源就叫做临界资源 临界区:每个线程内部,访问临界资源代码,就叫做临界区 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区...但有时候,很多变量都需要在线程间共享,这样变量称为共享变量,可以通过数据共享,完成线程之间交互。 多个线程并发操作共享变量,会带来一些问题 所以多线程之间为什么要有互斥?...Linux上提供这把锁叫互斥量。...3.互斥底层实现?...所有线程在争锁时候,只有一个锁,交换过程,只有一条是汇编——所以该过程是原子 CPU寄存器硬件只有一套,但是CPU寄存器内部数据,数据线程硬件上下文是有多套

    10710

    hashmap底层实现原理_hashtable底层数据结构

    一:HashMap底层实现原理解析 我们常见有数据结构有三种结构:1、数组结构 2、链表结构 3、哈希表结构 下面我们来看看各自数据结构特点: 1、数组结构: 存储区间连续、内存占用严重、空间复杂度大...,从而实现了查询和修改效率高,插入和删除效率也高一种数据结构 常见HashMap就是这样一种数据结构 HashMap中put()和get()实现原理: 1、map.put(k,v)实现原理...(2)然后它底层会调用KhashCode()方法得出hash值。 (3)通过哈希表函数/哈希算法,将hash值转换成数组下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。...如果其中一个节点K和参数K进行equals返回true,那么此时该节点value就是我们要找value了,get方法最终返回这个要找value。 为何随机增删、查询效率都很高原因是?...因为equals方法默认比较是两个对象内存地址 二:HashMap红黑树原理分析 相比 jdk1.7 HashMap 而言,jdk1.8最重要就是引入了红黑树设计,当hash表单一链表长度超过

    45520

    Slice底层自动扩容

    go语言圣经中解释: 数组和slice之间有着紧密联系。 一个slice是一个轻量级数据结构,提供了访问数组子序列(或者全部)元素功能,而且slice底层确实引用一个数组对象。...指针指向第一个slice元素对应底层数组元素地址,要注意是slice第一个元素并不一定就是数组第一个元素。...长度对应slice中元素数目;长度不能超过容量 容量一般是从slice开始位置到底层数据结尾位置。内置len和cap函数分别返回slice长度和容量。...make([]T, len, cap) len<=cap 在底层,make创建了一个匿名数组变量,然后返回一个slice slice只引用了底层数组前len个元素,但是容量将包含整个数组。...额外元素是留给未来增长用 从下面这个自定义函数里可以了解扩容机制: func appendInt(x []int, y int) []int { var z []int //+1个元素后新长度

    51920

    拼多多底层逻辑

    我之前文章美团“四大名著”里面提到了王慧文一些底层逻辑,所以我觉得,创始人或是创始团队底层逻辑其实决定了一家公司未来发展规模和天花板,也决定了投资这家公司长期收益。...因为我目前手里买股票主要是:tx,mt,pdd,jd,所以每隔一段时间可能会分析一些这些公司背后我所吸收一些底层逻辑,也就是我为什么准备长期持有这几家公司原因吧,今天先简单聊下pdd吧。...消费者时间变得更碎片化,消费者标签变得更随机。以前本来很有目的性购物,慢慢变成了基于兴趣使然随机性行为。在有限碎片化时间里去逛,引发兴趣而产生交易行为。...这是pdd底层对于效率重视,我见过一些独角兽公司在基建这块不重视,最后导致上面的效率提不上去,所以这种公司天花板还是比较堪忧。 既然数据在后流量时代这么重要,对于流量使用和有效转化就更加重要。...如果可以拿到用户衣食住行全方位数据呢?可以完善底层零售体系,反馈给用户就可以建立新场景,完善用户需求,形成闭环。

    1.1K00
    领券