【发布时间】:2010-05-23 07:48:46
【问题描述】:
我听说过很多关于 C 语言性能的事情;与正常分配相比,强制转换很慢,函数调用很慢,二进制操作比正常操作快得多,等等......
我确信其中一些内容是特定于架构的,编译器优化可能会产生巨大的影响,但我希望看到一个图表来大致了解我应该做什么以及应该避免写什么高性能程序。有没有这样的图表(或网站、书籍、任何东西)?
【问题讨论】:
-
"...转换很慢..." 在 C 中,转换是运行时的零时间操作。它完全在编译时发生。同样,函数调用在高级语言中的速度并不比在 C 中快得多。 字面意思只是“将返回值压入堆栈,将 0..n 参数压入堆栈,执行跳转。”你从哪里得到这些“真相”?因为我会找到另一个来源。 :-)
-
投射很慢?在 C?它甚至在运行时都不存在。
-
@T.J.有些演员表不是免费的。例如,将
char转换为double。还是很便宜的。 -
@T.J.:仍然……确实。你是对的,“真相”应该被留在发现它们的岩石之下。 :-)
-
一般情况下的转换不完全在编译时完成。强制转换是从一种类型到另一种类型的转换,这种转换可以是零成本(例如,在 2s 补码架构上将
int转换为unsigned int)、廉价(例如,符号扩展signed char到int) 或昂贵的(例如,将float转换为int)。
标签: c performance