【发布时间】:2011-09-22 14:30:57
【问题描述】:
我正在使用的游戏引擎在调试构建时速度太慢,无法调试游戏。我想要的一件事是让编译器内联小函数(尤其是在向量/矩阵和容器类中)。这可能会也可能不会在调试构建中加速游戏。在进行大量分析并试图找出瓶颈之前,我想我会先尝试一下,因为我只需要做最少的工作,结果可能很有希望。
那么,有没有办法让 Visual C++ 编译器在调试版本中内联函数?
【问题讨论】:
标签: c++ visual-c++ inline
我正在使用的游戏引擎在调试构建时速度太慢,无法调试游戏。我想要的一件事是让编译器内联小函数(尤其是在向量/矩阵和容器类中)。这可能会也可能不会在调试构建中加速游戏。在进行大量分析并试图找出瓶颈之前,我想我会先尝试一下,因为我只需要做最少的工作,结果可能很有希望。
那么,有没有办法让 Visual C++ 编译器在调试版本中内联函数?
【问题讨论】:
标签: c++ visual-c++ inline
项目选项 -> C/C++ -> 优化 -> 内联函数扩展。将此转至/Ob2。在您的调试配置中执行此操作。
在Release中,内联函数扩展是由其他优化设置隐含的,所以即使默认情况下所有配置都对设置说“默认”,行为确实不同。
我相信 Debug 构建应该具有与 release 相同的内联扩展行为;真的没有理由不这样做。
【讨论】:
您混淆了两个编译器选项。 /O 影响优化,包括内联。 /ZI 创建用于调试的 PDB 文件。它们可以独立设置。
不过,克隆“调试”配置并使用/O1 和/ZI 创建“调试优化”配置可能会很有用。
【讨论】:
你可以试试__forceinline。请务必阅读该页面上的调试版本(关闭/Ob0 选项)。
我怀疑这不会改变性能。如果您还没有尝试,另一件事就是将符号添加到发布版本中。它可以很好地调试很多问题。
【讨论】:
DEBUG 在调试模式下编译项目时由 Visual Studio 定义,因此:
#ifdef DEBUG
inline void fn() {
#else
void fn() {
#endif
【讨论】:
inline 关键字在调试时被编译器完全忽略