高效的ARM平台C++编程

4

我将为内部员工提供关于在ARM上使用C++的培训,重点放在编程技巧和提示方面,并搜索了一些网页,如下:

以上所有内容主要针对ARM上的C语言,我想知道它们是否也适用于C++,例如结构体填充等。

你能帮我解决这个问题吗?谢谢。


1
Efficient C for ARM 中提到的技巧适用于大多数现代 CPU(除了“没有 div 指令”)。使用 char 和 short 来节省“空间”通常比它所值的“时间”要花费更多。 - jmucchiello
1个回答

1

我没有看第一个链接,第二个链接“Efficient C for ARM”非常好,感谢您的发现和分享,我将向人们推荐该链接。

就像汇编语言的禅宗一样,它仍然与当今相关,不是因为现代x86与8088/86和“周期吞噬者”有关,而是因为所教授的思维过程和分析方法随时间不变。周期吞噬者可能会从语言到语言或从目标到目标不同,但如何找到它们并没有改变。那本书在发布时已经过时和无关紧要,至少我在某个地方读到了针对8088/86的调优已经过时,但我当时阅读了它,并且自那以后每天都在运用我所学到的知识。

在C++中,ARM的高效C同样适用于类似的项目,但更重要的是,在显示任何特定结构或代码之前,请查看早期幻灯片。您必须通过检查和使用分析器(与汇编语言的禅宗所说的没有什么不同,看看它并计时)。然后,ARM的高效C页面继续检查一些示例,获取您的C++代码并编译它,然后反汇编并查看实际发生的情况。这样做的问题在于,您必须意识到编译器上有许多调整旋钮,并且编译器不断发展,而不同的编译器,如gcc、llvm(clang)和visual C/C++完全不同。将相同的C++源代码呈现给不同版本的编译器和相同编译器的不同优化设置将产生不同的结果。

当你想要微调优化时,你必须通过大量的反汇编和分析编译器对你的代码所做的操作来学习编译器的工作方式(对于每个你关心的目标)。只有这样,你才能开始进行一些真正的优化,而不必诉诸于编写汇编语言。尽管人们可能会告诉你不能这样做,但在某些情况下,通过简单地重新排列结构、函数、代码行等,你可以显著提高执行性能。此外,制作更易于移植到其他处理器的代码,并使代码在许多平台上通常更快,而不仅仅是一个平台。否定者是正确的,你需要有一个好的理由,有时它并不会改变可读性,但是过度使用会使你的代码难以阅读、难以维护或易碎等。始终以合理的方式排列你的结构,首先是较大的、对齐的变量,然后逐渐变小。其他事情可能不是你想要养成的习惯,而只是为特殊场合准备的。

呃,刚看了你的第一个链接,面试问题,不要读那个,不要按那些建议做,也不要问面试者那些问题。当你在这个领域有很多经验后,再回头看那个页面。是的,那里有一些智慧和经验,但你必须知道如何和何时使用它,而不是使用它。它没有深入探讨原因、方法以及应该做和不应该做的事情。 - old_timer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接