c++ - 使编译器/优化器能够更快地编写程序的编码实践

标签 c++ c performance optimization

很多年前,C 编译器并不是特别聪明。作为解决方法,K&R 发明了 register 关键字,以提示编译器,将此变量保存在内部寄存器中可能是个好主意。他们还制作了三级运算符以帮助生成更好的代码。

随着时间的推移,编译器日趋成熟。他们变得非常聪明,因为他们的流程分析使他们能够比你可能做的更好地决定将哪些值保存在寄存器中。 register 关键字变得不重要。

由于 alias,对于某些类型的操作,FORTRAN 可以比 C 更快问题。理论上,通过仔细编码,可以绕过这一限制,使优化器能够生成更快的代码。

哪些编码实践可以使编译器/优化器生成更快的代码?

  • 请指出您使用的平台和编译器,我们将不胜感激。
  • 为什么这项技术似乎有效?
  • 鼓励使用示例代码。

这是一个related question

[编辑] 这个问题不是关于分析和优化的整体过程。假设程序已正确编写、经过全面优化编译、测试并投入生产。您的代码中可能存在阻止优化器尽其所能完成最佳工作的结构。您可以做些什么来重构以消除这些限制,并允许优化器生成更快的代码?

[编辑] Offset related link

最佳答案

这是帮助编译器创建快速代码的编码实践——任何语言、任何平台、任何编译器、任何问题:

不要使用任何强制甚至鼓励编译器按照您认为最好的方式将变量放置在内存(包括缓存和寄存器)中的巧妙技巧。首先编写一个正确且可维护的程序。

接下来,分析您的代码。

然后,并且只有到那时,您才可能想要开始研究告诉编译器如何使用内存的效果。一次进行 1 项更改并衡量其影响。

预计会失望,并且确实必须非常努力地工作才能获得小的性能改进。 Fortran 和 C 等成熟语言的现代编译器非常非常好。如果您阅读了有关通过代码获得更好性能的“技巧”的说明,请记住,编译器作者也阅读过它,如果值得这样做,可能会实现它。他们可能首先写下了您阅读的内容。

关于c++ - 使编译器/优化器能够更快地编写程序的编码实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880523/

相关文章:

c++ - 在 visual studio 2010 C++ 中构建错误

c++ - 如何获取程序运行的目录?

java - BeanUtils 与 ReflectionToStringBuilder 的性能对比(用于 Bean 类)

performance - OpenMP 通过三重 for 循环并行化矩阵乘法(性能问题)

sql-server - SQL Server : Query fast, 但过程缓慢

c++ - C++中的命名空间冲突

c++ - Wt c++ 与 Postgresql

c++ - C++11 中的 Unicode

c - 如何仅在C中接受字符输入?

c - 使用 Xcode,如何创建像 Eclipse 中一样的工作区?