对于时间紧迫的代码段,我有自己的实现。我一直在研究时间紧迫的代码以减慢速度,发现该实现比我优化的时间紧迫的代码消耗了大约2%:
#define UTILITY_UNUSED(exp) (void)(exp)
#define UTILITY_UNUSED2(e0, e1) UTILITY_UNUSED(e0); UTILITY_UNUSED(e1)
#define ASSERT_EQ(v1, v2) { UTILITY_UNUSED2(v1, v2); } (void)0
时间紧迫的代码已将这些ASSERT*
定义用于调试目的,但在发行版中它显然已被删除,但是...似乎此代码在Visual Studio 2015 Update 3
以下方面产生了更快的代码:
#define UTILITY_UNUSED(exp) (void)(false ? (false ? ((void)(exp)) : (void)0) : (void)0)
#define UTILITY_UNUSED2(e0, e1) (void)(false ? (false ? ((void)(e0), (void)(e1)) : (void)0) : (void)0)
原因是双重false ?
表达。它在某种程度上以最大的优化生成了更快的代码。
我不知道为什么这样做更快(似乎是编译器优化中的一个错误),但是对于这种情况,它至少是一个更好的解决方案。
注意:这里最重要的是,时间紧迫的代码的速度降低了,而没有上述声明或释放中未使用的宏。换句话说,双重false ?
表达式出人意料地有助于优化代码。