静态 与动态 (小探究)

动态链接库和静态链接库么?
静态链接库就是你的程序编译的时候,会把这些库一起链接进去,会增加最后生成的可执行文件的大小,以后不需要外部提供这个库,就可以执行

动态链接库就是不链接进去,执行的时候,需要提供动态链接库给它调用



 

静态函数库与动态函数库区别、应用--ldconfig、ldd

1、函数库静态与动态区别: Linux\
    a、静态函数库:副档名为 .a,是把整个包括入程序里的,程序会比较大,升级麻烦
    b、动态函数库:副档名为 .so,链接的方式,灵活,程序小,主推

2、将动态函数库放入内存里提高速度:
首先,我们必须要在 /etc/ld.so.conf 里面写下‘ 想要读入快取记忆体当中的动态函式库所在的目录’,注意喔, 是目录而不是档案;接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;同时也将资料记录一份在 /etc/ld.so.cache 这个档案当中呐!

例子:假设我的 MySQL 资料库函式库在 /usr/lib/mysql 当中,如何读进 cache ?
[root@www ~]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib/mysql   <==这一行新增的啦!

[root@www ~]# ldconfig  <==画面上不会显示任何的资讯,不要太紧张!正常的!

[root@www ~]# ldconfig -p  <==列出目前有的所有函式库资料内容 (在 /etc/ld.so.cache 内的资料!)

3、某个程序调用了什么动态库,某动态库相关的其他库是什么:
[root@www ~]# ldd [-vdr] [filename]
选项与参数:
-v :列出所有内容资讯;
-d :重新将资料有遗失的 link 点秀出来!
-r :将 ELF 有关的错误内容秀出来!

范例一:找出 /usr/bin/passwd 这个档案的函式库资料
[root@www ~]# ldd /usr/bin/passwd
....(前面省略)....
        libaudit.so.0 => /lib/libaudit.so.0 (0x00494000)     <==SELinux
        libselinux.so.1 => /lib/libselinux.so.1 (0x00101000) <==SELinux
        libc.so.6 => /lib/libc.so.6 (0x00b99000)
        libpam.so.0 => /lib/libpam.so.0 (0x004ab000)         <==PAM 模组
....(底下省略)....
# 我们前言的部分不是一直提到 passwd 有使用到 pam 的模组吗!怎么知道?
# 利用 ldd 察看一下这个档案,看到 libpam.so 了吧?这就是 pam 提供的函式库

范例二:找出 /lib/libc.so.6 这个函式的相关其他函式库!
[root@www ~]# ldd -v /lib/libc.so.6
        /lib/ld-linux.so.2 (0x00ab3000)
        linux-gate.so.1 =>  (0x00636000)

        Version information:  <==使用 -v 选项,增加显示其他版本资讯!
        /lib/libc.so.6:
                ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
                ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
                ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2

静态函数与动态函数的区别

静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失。
静态成员函数不需要类实例化就能调用的
静态方法:属于类,使用class.method()调用,在程序运行之初就会被装入内存,在程序的运行期间一直存在。
非静态方法:属于类的对象,使用new class().method()调用,用完会被GC回收,下次用在创建。
使用static 关键字描述的方法是静态方法,又称为类方法。反之则是实例方法。

类方法与具体的对象无关,只与类定义有关。如果需要实现的方法与具体的对象可以完全脱离关系,建议使用静态方法。静态方法的优点在于不需要实例化对象,直接调用。(凡是可以使用静态方法的地方,基本上都可以用实例方法来替代;反之则不然)。

实例方法是与具体类实例关联的方法。调用这类方法必须由具体的对象来调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值