c++ - 静态库性能 - 可以内联调用吗?

标签 c++ static-libraries

我一直在尝试制作一个游戏引擎,我从制作数学基础( vector 、矩阵和点类)开始。 我想制作一个静态库文件 (.lib),然后可以在需要的地方在游戏引擎的其余部分中使用它。

我想知道的是以下内容。由于库中的大多数函数都需要尽可能快。我希望看到函数,例如内联的 Vector 类。编译器可以自动执行此操作吗?或者是否需要某种提示?

我知道我可以将所有源代码放入头文件中,但我认为这并不是一个真正优雅的解决方案,因为某些函数可能太大而无法内联。 (对于使用它们的人来说,头文件不会显得困惑。)

希望大家能帮帮我。

基督教

最佳答案

只有在编译单元具有源代码可见性的情况下,函数内联才能保证与当前的编译器技术一起使用。一旦将代码编译到库中,无论该函数做什么,它都不会内联该函数。

有一些“整个程序优化”方案(至少在 MSVC 和 GCC 中可用,也可能在其他编译器中可用),它们生成的“目标文件”只是机器代码方式的一部分,因此某些有关“源代码想要什么”的信息可用于最终的代码生成/链接阶段,以移动代码、执行内联等,但这仅适用于所有源文件在编译时可用时。一旦某些东西被制作成最终的目标代码(静态库就是),它就不会进入“内联”部分。

显然,如果您有类,它们将位于头文件中,因此如果您将适合内联的函数放入头文件中,编译器将做正确的事情。

关于c++ - 静态库性能 - 可以内联调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384839/

相关文章:

c++ - "Illegal block entry"以及 yaml-cpp 中的 YAML 怪物示例

unix - 从静态库中提取函数名称

c++ - 在恒定时间内交换 std::vector 的内容——这可能吗?

c++ - 如何最好地编写使用相同互斥锁的多个函数

c++ - IWebBrowser2 问题 - 如何在新窗口中打开文档?

c++ - 错误 C2059 : syntax error: 'constant' from struct member declarations

iphone - Xcode for iPhone 静态库和动态库的区别

c++ - 静态库中的"Conditional jump or move depends on uninitialised value"

java - 静态链接库和 JNI?

c++ - Visual Studio 是否发出错误的汇编代码?