到目前为止,我只编写和构建过静态库,因此,我对共享库场景(或 DLL,因为它们在 Windows 上被称为 DLL)还是个新手。
据我了解,DLL 的主要功能是,当应用程序调用库时,库代码会从应用程序中“加载”和“卸载”。因此,我的问题是,这种动态加载和卸载(通常)是否会使 DLL 对于速度关键型应用程序来说不理想?
例如,考虑这个 C++ 片段:
int x = 4;
lib_function(x);
non_lib_function();
My_Lib_Type foo(4, 3);
Run Code Online (Sandbox Code Playgroud)
假设My_Lib_Type和lib_function()是在 DLL 中定义的,应用程序是否会加载库来调用lib_function(),在调用后卸载,然后再次加载以调用 的构造函数My_Lib_Type?如果这就是它的工作原理,那么这个切换过程有多快?
DLL 通常仅由应用程序加载(和卸载)一次:隐式(如果您的可执行文件通过相应的导出库链接到它)或显式(在 Windows 上通过调用LoadLibrary()和)。FreeLibrary()每次调用其函数之一时,不会加载它。
一旦该 DLL 被加载,其组件函数和其他导出单元的访问方式与可执行模块本身中定义的方式大致相同 \xe2\x80\x93 DLL 被加载到调用应用程序的进程内存中。
\n因此,在静态链接库上使用 DLL 时,不会出现明显的速度下降(或者不应该出现)。
\n