我看到很多人建议在高性能应用程序中尽可能避免变量的数据类型转换。我从未理解为什么要这样做,通常我会进行很多次变量类型转换,主要是为了避免编译器警告。这对性能有任何影响吗?
常见的代码:
1)将struct X *
转换成 void *
后传递给函数。
2)将uint16_t
类型转换成 uint32_t
。
我看到很多人建议在高性能应用程序中尽可能避免变量的数据类型转换。我从未理解为什么要这样做,通常我会进行很多次变量类型转换,主要是为了避免编译器警告。这对性能有任何影响吗?
常见的代码:
1)将struct X *
转换成 void *
后传递给函数。
2)将uint16_t
类型转换成 uint32_t
。
struct X *
传递给需要 void *
的函数uint16_t
转换为 uint32_t
根据具体情况和编译器实现,这可能是免费的。例如,如果要转换的值已经保存在32位寄存器中,则不需要执行任何操作。此外,编译器可能能够在特定表达式中将其实现为无操作。请注意,如果 uint32_t
与常见的 unsigned int
相同,那么C语义要求在算术表达式的评估中例行执行此特定转换,因此许多这些属于无论您是否进行强制转换都会发生的转换类别。