两个程序链接到动态链接库

时间:2015-11-10 08:20:21

标签: c dynamic dll linker shared-libraries

我仍然是C中的菜鸟,所以我对链接有疑问。 我们有两个程序“A”和“B”,它们链接到动态链接库“C”。

现在我们启动程序“A”和“B”。

现在“C”发生了什么。是为两个程序加载一次,还是为每个程序加载两次?

什么是程序B是一个Python程序,它使用外部函数接口?

3 个答案:

答案 0 :(得分:2)

这一切都取决于操作系统,但对于例如Linux或Windows共享库只会加载一次,但它将映射两次。使用共享库的每个进程都将映射库,但这些映射都会导致相同的单个加载库。

映射是在每个进程的基础上完成的,进程的作用或者是什么并不重要(如果它是你制作的程序,Python解释器,或者完全不同的东西)。

答案 1 :(得分:0)

在Google上搜索Dynamic linking C给了我以下结果(动态加载了共享库)

共享库在启动时由程序加载到内存中。正确加载共享库后,稍后启动的所有程序将自动使用已加载的共享库。

答案 2 :(得分:0)

对于Windows,只在进程之间共享DLL(动态链接库)代码。每个进程都有自己的虚拟内存地址空间,包括DLL使用的数据。这意味着DLL通常不具有在进程之间共享的静态缓冲区。进程或DLL代码可以设置共享内存,共享内存可以在进程之间共享。

MSDN文章:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms681914(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682594(v=vs.85).aspx

http://msdn.microsoft.com/en-s/library/windows/desktop/ms686958(v=vs.85).aspx