2

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

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

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

我希望你们能帮助我。

基督教

4

2 回答 2

1

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

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

显然,如果你有类,它们就会在头文件中,所以如果你把适合内联的函数放入头文件,编译器就会做正确的事情。

于 2013-05-05T13:30:18.293 回答
1

是的,您可以通过链接时间优化来做到这一点。如果您生成一个“胖”库,它将包括已编译的源代码以及可用于在链接时内联函数的中间形式(本质上,在链接时完成最后的编译步骤,所有内容都是可见的)。

该技术有些脆弱,因为您需要确保在编译和链接时使用相同的标志,并且还有一些其他限制:它不是公开分发库的好方法。如果它是用于受控的内部使用,它可能会运作良好。

于 2017-10-29T01:03:06.307 回答