动态加载vs静态加载

动态加载:

1:灵活,可以在需要的时候用LoadLibrary进行加载,在不需要的时候用FreeLibrary进行卸载,这样可以不必占用内存。
2:可以在没有dll时候发现,而不致程序报错。
3:加载程序中有条件才运行的库。
4:热更新,在不停止程序的前提下进行更新。
5:复杂一些,需要显示获得函数地址。
6:dll没有对应的lib文件,此时只能进行动态加载。
静态加载:
1:简单方便
2:没有dll时,系统报错
3:加载运行很久的库
4:dll必需有相应的lib文件

加载方法:
1、确保有a.dll和a.lib,两个文件都有的话可以用静态加载的方式。
2、在.cpp文件中通过#pragma comment(lib, "a.lib") 加载lib,并包含相应的头文件,就可以使用dll中的函数了~
所谓"程序库",简单说,就是包含了数据和执行码的文件。其不能单独执行,可以作为其它执行程序的一部分,来完成执行功能。库的存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便于升级。 
      程序库可分三类:静态库,共享库和动态加载库。 
      静态库,是在执行程序运行前就已经加入到执行码中,在物理上成为执行程序的一部分;共享库,是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。动态加载库,其实并不是一种真正的库类型,应该是一种库的使用技术,应用程序可以在运行过程中随时加载和使用库。 
     建议库开发人员创建共享库,比较明显的优势在于库是独立的,便于维护和更新;而静态库的更新比较麻烦,一般不做推荐。然而,它们又各有优点,后面会讲到。在C++编程中,要使用动态加载技术,需要参考文章"C++ dlopen MINI-Howto"。 

      静态库可以认为是一些目标代码的集合。按照习惯,一般以".a"做为文件后缀名。使用ar(archiver)命令可以创建静态库。因为共享库有着更大的优势,静态库已经不被经常使用。但静态库使用简单,仍有使用的余地,并会一直存在。 
     静态库在应用程序生成时,可以不必再编译,节省再编译时间。但在编译器越来越快的今天,这一点似乎已不重要。如果其他开发人员要使用你的代码,而你又不想给其源码,提供静态库是一种选择。从理论上讲,应用程序使用了静态库,要比使用动态加载库速度快1-5%,但由于莫名的原因,实际上可能并非如此。由此看来,除了使用方便外,静态库可能并非一种好的选择。 

转载于:https://www.cnblogs.com/loanhicks/p/7413999.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webpack前端打包工具

一、安装 安装Webpack之前需要安装nodejs,然后用npm安装: $ npm install webpack -g &nsbp;运行以上命令就将Webpack安装到了全局环境中。 但是通常我们会将Webpack只安装到项目的依赖中: $ cd /www/webpack_demo1 // 进入项目目录,确保该目录…

动态语言静态化

一、什么是动态语言静态化 将现有PHP等动态语言的逻辑代码生成为静态html文件,用户访问动态脚本重定向到静态html的过程 注 : 对实时性要求不高的页面才适合去做动态语言静态化 二、为什么要静态化 1. 动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大 2. 访…

WPF-06 样式(Style)

在我们前面介绍资源的时候&#xff0c;我们提到了样式表&#xff0c;如果你之前是做Web开发的&#xff0c;你会发现Style有点类似于Web中的CSS。控件级别样式我们可以在控件级别定义自己的样式&#xff0c;控件级别的样式是优先级最高的<Window x:Class"Example_06.Sel…

构建Squid代理服务器-传统代理、透明代理、反向代理

Squid是Linux系统中最常用的一款开源代理服务软件&#xff0c;主要提供缓存加速和应用层过滤控制的功能&#xff0c;可以很好的实现HTTP、FTP、DNS查询以及SSL等应用的缓存代理。 正向代理&#xff1a;根据实现的方式不同&#xff0c;代理服务可分为传统代理和透明代理。 传统代…

Struts2之初识

Struts2教程 第一章 初识Struts2 主页&#xff1a;http://struts.apache.org/ 优势&#xff1a;用户请求&#xff0c;模块处理&#xff0c;页面展现。适用于企业级开发&#xff0c;便于维护。 配置&#xff1a;web.xml中添加的核心控制器 <filter> <filter-name>St…

数据库缓存层

一 常见的缓存形式 : 1.文件缓存 (为了避免I/O开销,尽量使用内存缓存) 2.内存缓存 二 为什么要使用缓存 缓存数据是为了让客户端很少甚至不访问数据库服务器进行的数据查询,高并发下,能最大程度降低对数据库服务器的访问压力 一般的数据请求: 用户请求->数据查询->…

python面试题~反射,元类,单例

1 什么是反射&#xff1f;以及应用场景&#xff1f; test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 复制代码import test as ss ss.f1() ss.f2() print(ss.a) 复制代码我们要导入另外一个模块,可以使用import.现在有这样的需求,我…

仅有50Mb大小的cli即可搞定大厂才能玩的CloudIDE丨SmartIDE

作者&#xff1a;徐磊&#xff0c;开源云原生SmartIDE创始人、LEANOSFT创始人/首席架构师/CEO&#xff0c;微软最有价值专家MVP/微软区域技术总监Regional Director&#xff0c;华为云最有价值专家。从事软件工程咨询服务超过15年时间&#xff0c;为超过200家不同类型的企业提供…

idea-spark-sbt 打包jar

1、打开idea下的terminal窗口 2、只打包部分项目 sbt insight-import/clean insight-import/assembly 这表示只打包主目录下的insight-import项目 &#xff0c;先清理&#xff08;clean&#xff09;再打包&#xff08;assembly&#xff09;不能用package&#xff0c;这个不会打…

操作Checkbox标签

在前端开发中&#xff0c;少不了对Checkbox的操作。 常用的的方法有2个&#xff1a;.is()和.prop()方法。前者是判断 checkbox的状态&#xff0c;选不是未选。而后者为checkbox设置一个值&#xff0c;可以设置checkbox是true还是false。写个小例子&#xff0c;练习一下&#xf…

memcache在项目中的应用

一 安装memcache 具体流程这篇文章有写到: 点击 链接 二 在项目中应用memcache 为了减轻数据库的查询压力,所以我们把一些不经常变动的数据进行缓存,用户查询时,如果查询的要求是一样的,我们就memcache缓存中读取数据并返回去,如果查询要求变了,我们再到数据库中查询,并将查…

点击回退按钮刷新页面

浏览器用户返回上一步&#xff0c;自动刷新window.οnunlοadfunction(){} 这个最简单粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

Dapr 证书过期了怎么办? 别慌,有救!

一、背景Dapr 默认证书有效时间是1年&#xff0c;证书过期后就不能执行相关控制面和数据面的交互了&#xff0c;如下图&#xff1a;二、查看证书有效时间通过dapr mtls expiry 看到期时间&#xff0c;具体参见命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

python数据类型之间的转换

对python内置的数据类型进行转换时&#xff0c;可以使用内置函数&#xff0c;常用的类型转换函数如下 python常用类型转换函数函数格式使用示例描述int(x [,base])int("8") 可以转换的包括String类型和其他数字类型&#xff0c;但是会丢失精度 float(x) float…

js高级程序设计的笔记(一)

2019独角兽企业重金招聘Python工程师标准>>> 1.js中的 null : 如果只意在保存对象的变量还没有真正的保存对象之前&#xff0c;就需要先把该变量保存 null值&#xff0c; null代表空对象的指针 2.函数的参数对象 arguments的理解。 argument对象的length属性 实例 f…

Redis在PHP项目中的应用

一 运行redis服务端 出现上图的图形,就说明redis服务端开启成功,并且开启了密码功能(如果不加载配置文件,连接redis是不需要密码的,这样,会给我们的程序带来很大隐患) 密码的设置: 在redis配置文件中,搜索requirepass ,后面设置密码 比如 : requirepass G506myredis 则表示此…

Linux关机、重启命令

关机shutdown -h 0 #<O秒后关机shutdown -h now #<现在关机shutdown -h 10 #<10分钟后关机shutdown -h 23:20 #<23&#xff1a;20分关机shutdown -c #<取消shutdown关机命令init 0 #<立马关机&#xff08;切换运行级别为0&#xff0c;推荐使用&#xff09;ha…

Python 模块之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)结果 abc…

md5和password_hash孰好孰坏

md5自不必说,想必所有phper都用过,但另一个加密函数不知道你见过没有 他就是password_hash(); 加密方式更全面.使用起来也比md5salt这种方式要简洁很多,最主要的是难破解,因为它每时每刻都在变动 它的使用方式大致是这样 1. 用户注册时提交过来密码,我们对用户密码进行加密…