在我的 C++ 项目中,我多次调用静态库中的函数,所以我想知道链接器是否只复制该函数一次,或者每次在源代码中调用它时。
最佳答案
链接器将每个使用的函数复制一次。
为了让简短的回答变长,我将解释:
链接DLL或共享库时,没有拷贝,你的程序必须加载链接库或DLL到内存中,如果它还没有加载,并从中调用函数,静态库是不同的,因为没有依赖运行时,因此每个使用的函数都被复制到可执行文件中。
有一个异常(exception),inline
函数可以为每次使用复制,但不是作为函数而是作为代码复制。函数代码(或多或少)被复制到您的代码调用该函数的位置。它由编译器完成,而不是由链接器完成。
inline
函数是有保证的,这就像是对编译器的推荐。当您将函数声明为内联时,您通常将代码放在头文件中。编译器也可能决定一个函数是内联
,即使没有声明,作为一种优化,它可能发生在函数非常短的地方。
所以结论是链接静态库时,函数只被复制一次到可执行文件中。
关于c++ - 链接到静态库时的多个函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850562/