C中类型转换变量的性能开销

dea*_*eef 8 c performance x86

我见过人们建议尽量避免在高性能应用程序中对变量进行类型转换.我从来没有理解这个的原因,我倾向于大量的时间来避免编译器警告.这对性能有什么影响吗?常见的代码:

1)struct X *传递给一个需要的函数void *

2)uint16_ttypecasted到uint32_t

Joh*_*ger 13

[铸造]是否会对性能产生任何影响?

不是直接的.类型转换表示值从一种数据类型到另一种数据类型的显式转换.实际上转换可能会对性能产生影响,如果无论你是否进行转换都会进行转换,那么转换对性能没有任何影响.

例如,可以设置一些编译器来警告从浮点类型到整数类型的隐式转换,并且通常可以通过使用强制转换使转换显式化来使这些警告静音.这并没有改变转换将被执行的事实,并且这种转换不是免费的,但是转换不会使转换成本比原本更昂贵.

此外,一些转换可以免费实施.例如,在大多数机器上,具有相同宽度的有符号和无符号整数类型具有兼容的表示,因此在这些类型之间转换值是无操作.仅添加或删除类型限定符的强制转换_Atomic也属于此类别.

关于您的具体示例:

1)struct X *传递给一个需要的函数void *

C不需要针对不同指针类型的兼容表示,但实际上现在很少有不同的对象指针类型具有不同的表示.因此,指针类型之间的转换通常是免费的.然而,这几乎不重要,因为您询问的具体情况是,无论您是否插入显式转换,都将执行转换.

2)uint16_ttypecasted到uint32_t

这可能是免费的,具体取决于具体情况和编译器实现.例如,如果要转换的值已经保存在32位寄存器中,那么它就是无操作.此外,编译器可能能够在其出现的特定表达式中将其实现为无操作.还要注意的是,如果uint32_t是一样的unsigned int,因为是常见的,那么C语义需要这种特殊的转换来进行常规的算术表达式的评价,所以很多这些都可以归为转换会发生,你是否投与否的范畴.