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

湘西网站建设排名seo公司

湘西网站建设,排名seo公司,使用经典wordpress编辑器使用手册,做公司简介的开源网站1.什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载…

1.什么是库

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。

本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。

库有两种:静态库(.a、.lib)和动态库(.so、.dll)。

所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:

2.从源文件编译生成可执行文件的步骤

2.1编译

(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。

(2)编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。

(3)汇编是将汇编代码转变成机器可以执行的指令。

至此,C源代码文件经过预编译、编译和汇编直接输出目标文件(.o文件)。 这个过程也就是编译器所做的事(即 将高级语言翻译成机器语言),比如我们用"C/C+语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。

现代的编译器将一个源代码文件编译成一个未链接的目标文件,然后由链接器最终将这些目标文件链接起来形成可执行文件。

2.2链接

程序设计的模块化是人们一直在追求的目标,因为当一个系统十分复杂的时候,我们不,得不将一个复杂的系统逐步分割成小的系统以达到各个突破的目的。一个复杂的软件也如此,人们把每个源代码模块独立地编译,然后按照须要将它们“组装”起来,这个组装模块的过程就是链接(Linking),链接的主要内容就是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正确地衔接。

3.静态链接

最基本的静态链接过程如图所示。每个模块的源代码文件(如.c)文件经过编译器编译成目标文件(Objet File,一般扩展名为.o或.obj), 目标文件和库(Library)一起链接形成最终可执行文件。而最常见的库就是运行时库(Runtime Library),它是支持程序运行的基本函数的集合。库其实是一组目标文件的包,就是一些最常用的代码编译成目标文件后打包存放。

4.动态链接

静态链接这种方法的确很简单,原理上很容易理解,实践上很难实现,在操作系统和硬件不发达的早期,绝大部分系统采用这种方案。随着计算机软件的发展,这种方法的缺点很,快就暴露出来了,那就是静态连接的方式对于计算机内存和磁盘的空间浪费非常严重。特别是多进程操作系统情况下,静态链接极大地浪费了内存空间,想象一下每个程序内部除了都保留着printf()函数、scanf()函数、strlen()等这样的公用库函数,还有数量相当可观的其他库函数及它们所需要的辅助数据结构。此外,静态链接对程序的更新、部署和发布也会带来很多麻烦,即一旦程序中有任何模块更新,整个程序就要重新链接、发布给用户。比如一个程序有20个模块,每个模块1 MB,那么每次更新任何一个模块,用户就得重新获取这个20 MB的程序。如果程序都使用静态链接,那么通过网络来更新程序将会非常不便,因为一旦程序任何位置的一个小改动,都会导致整个程序重新下载。

要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态地链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接这个过程推迟到了运行时再进行,这就是**动态链接(Dynamic Linking)**的基本思想。同样举个小例子:

最基本的静态链接过程如图所示。每个模块的源代码文件(如.c)文件经过编译器编译成目标文件(Objet File,一般扩展名为.o或.obj), 目标文件和库(Library)一起链接形成最终可执行文件。而最常见的库就是运行时库(Runtime Library),它是支持程序运行的基本函数的集合。库其实是一组目标文件的包,就是一些最常用的代码编译成目标文件后打包存放。

静态链接这种方法的确很简单,原理上很容易理解,实践上很难实现,在操作系统和硬件不发达的早期,绝大部分系统采用这种方案。随着计算机软件的发展,这种方法的缺点很,快就暴露出来了,那就是静态连接的方式对于计算机内存和磁盘的空间浪费非常严重。特别是多进程操作系统情况下,静态链接极大地浪费了内存空间,想象一下每个程序内部除了都保留着printf()函数、scanf()函数、strlen()等这样的公用库函数,还有数量相当可观的其他库函数及它们所需要的辅助数据结构。此外,静态链接对程序的更新、部署和发布也会带来很多麻烦,即一旦程序中有任何模块更新,整个程序就要重新链接、发布给用户。比如一个程序有20个模块,每个模块1 MB,那么每次更新任何一个模块,用户就得重新获取这个20 MB的程序。如果程序都使用静态链接,那么通过网络来更新程序将会非常不便,因为一旦程序任何位置的一个小改动,都会导致整个程序重新下载。

要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态地链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接这个过程推迟到了运行时再进行,这就是**动态链接(Dynamic Linking)**的基本思想。同样举个小例子:

5. 两者的区别

静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件(.exe文件)。

在使用动态库的时候,往往提供两个文件:一个引入库和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。

总结来说,二者的不同点在于代码被载入的时刻不同。

-----静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。
-----动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在,因此代码体积较小。

动态库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。带来好处的同时,也会有问题!如经典的DLL Hell问题,关于如何规避动态库管理问题,可以自行查找相关资料。

http://www.mmbaike.com/news/48877.html

相关文章:

  • 西安网站建设行业谷歌推广优化
  • 做家具网站要多少钱网站推广平台搭建
  • 把nas做网站操作流程武汉最新今天的消息
  • 网站建设目的和意义谷歌优化排名公司
  • 长春做网站多少钱电子商务网店运营推广
  • 门户网站区别百度推广的方式
  • 杭州pc网站制作公司sem与seo的区别
  • 单页面企业网站百度联盟是什么
  • 网站建设到上线步骤百度广告优化师
  • 做网站代理需要办什么营业执照竞价推广账户竞价托管收费
  • 北京知名vi设计公司珠海seo快速排名
  • 做网站需要购买网站空间吗浏览器网站进入口
  • 郑州小程序定制seo推广什么意思
  • 河南省建设部省厅网站网络营销促销方案
  • 青海青海西宁网站建设seo常用分析的专业工具
  • wordpress 主题构成河源网站seo
  • 做歌厅广告在哪个网站做好建网站免费
  • 同城配送网站建设郑州seo哪家好
  • 太原网站建站模板百度网站首页入口
  • 免费网站建设平台 iis百度信息流广告平台
  • 资深的网站推广网站ip查询
  • 杭州知名的网站制作策略宁波seo关键词费用
  • 宁波网络公司做网站优化的含义
  • 衡水哪儿做网站便宜国际军事最新消息今天
  • 构建网站需要会什么中央新闻直播今天
  • 公司企业邮箱登录入口福州seo快速排名软件
  • 什么网站专门做外贸批发搜索引擎是网站吗
  • 网站建设的类型或分类做网站哪个平台好
  • 电商网站图片是谁做互联网广告销售是做什么的
  • 商业网页设计整站优化工具