社区
Linux/Unix社区
帖子详情
动态库被多个程度调用时是怎么运行的
csklw_6931
2012-08-07 10:24:47
请教一个关于动态链接库的问题,当动态链接库被多个程序同时调用时,数据是如何做到互不相干的呢?
...全文
272
7
打赏
收藏
动态库被多个程度调用时是怎么运行的
请教一个关于动态链接库的问题,当动态链接库被多个程序同时调用时,数据是如何做到互不相干的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csklw_6931
2012-11-16
打赏
举报
回复
感谢楼上几位的解答!
Miss_Zhao
2012-08-08
打赏
举报
回复
补充一下:
DLL可以包含全局数据及局部数据
变量范围DLL变量的默认范围与应用程序所声明的变量作用域相同,
DLL源文件中的全局变量对于使用DLL的每个进程是全部可见的。
静态变量受限于声明所在块范畴。默认情况下,每个进程具有自己的DLL全局变量及静态变量实例。
小结:数据段也有细分
csklw_6931
2012-08-07
打赏
举报
回复
感谢解答![Quote=引用 2 楼 的回复:]
主要是利用虚拟内存,它允许库例程的物理内存安全地在多个独立用户空间共享。
代码段通常被使用进程所共享,也就是说它们在物理内存中占据一个地方。
数据段通常是私有的,每个使用进程都有自己的数据副本。
[/Quote]
夏天__
2012-08-07
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
主要是利用虚拟内存,它允许库例程的物理内存安全地在多个独立用户空间共享。
代码段通常被使用进程所共享,也就是说它们在物理内存中占据一个地方。
数据段通常是私有的,每个使用进程都有自己的数据副本。
[/Quote]
学习了。
wshn13
2012-08-07
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
主要是利用虚拟内存,它允许库例程的物理内存安全地在多个独立用户空间共享。
代码段通常被使用进程所共享,也就是说它们在物理内存中占据一个地方。
数据段通常是私有的,每个使用进程都有自己的数据副本。
[/Quote]
++
root_jli
2012-08-07
打赏
举报
回复
主要是利用虚拟内存,它允许库例程的物理内存安全地在多个独立用户空间共享。
代码段通常被使用进程所共享,也就是说它们在物理内存中占据一个地方。
数据段通常是私有的,每个使用进程都有自己的数据副本。
wshn13
2012-08-07
打赏
举报
回复
看看程序的链接与装载 不同的程序有不同的虚拟地址空间
VC++
动态库
封装及
调用
在应用程序的可执行文件中,存放的不是被
调用
的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。一般的
动态库
程序有lib文件和dll文件,lib文件是编译
时
期连接到应用程序中的,而dll文件是
运行
时
才会被
调用
的。使用静态编译的lib文件,在
运行
程序
时
不需要再挂
动态库
,缺点是导致应用程序比较大,而且失去了
动态库
的灵活性,发布新版本
时
要发布新的应用程序才行。在编译链接可执行文件
时
,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在
运行
的
时
候,再去加载DLL,访问DLL中导出的函数。
程序
运行
时
,是怎么找到
动态库
的?
我们随便开发一个C/C++程序,都很大
程度
不可避免的需要用到
动态库
: <stdio.h>int main(){ printf(“hello,编程珠玑\n”); return 0;}编译并查看使用到的
动态库
:$ gcc -o main main.c$ ldd main linux-vdso.so.1 (0x00007ffdf8fdf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1f8535e000
实用 | 程序
运行
时
,是怎么找到
动态库
的?
我们随便开发一个C/C++程序,都很大
程度
不可避免的需要用到
动态库
://来源:公众号【编程珠玑】 #include<stdio.h> intmain() { pr...
运行
时
加载
动态库
一个程序从源文件编译生成可执行文件的步骤: 预编译 --> 编译 --> 汇编 --> 链接 (1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。 (2)编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。 (3)汇编是将汇编代码转变成二进制文件。 (4)链接将二进制文件链接成一个可执行的命令,主要是把分散的数据和代码收集并合成一个单一的可加载并可执行的的文件。
C++
动态库
封装及
调用
一直对
动态库
的封装理解不是很透彻,虽然之前写过一个Demo,不过并没有真正的理解。所以写下来,帮助自己理解下。 1、一个程序从源文件编译生成可执行文件的步骤: 预编译 --> 编译 --> 汇编 --> 链接 (1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。 (2)编译过程就是把预处理完的文件进行一系列词法
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章