- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
很久很久以前,在遥远的银河系,我曾经用 Delphi 编写程序,然后如果我需要快速发生某些事情,我会用手写汇编程序编写这些例程。它生成的代码比编译器快得多。
但这是真的吗在实践中还有吗?显然,手写的汇编程序总是至少一样快原则上作为编译的高级代码。但自那些黑暗时期以来,CPU 已经走了很长一段路。现在,如果你想优化你的汇编器,你必须考虑指令的顺序,以便它们可以流水线化或同时运行,分支预测的影响,以及其他一百万件事;我怀疑不可能同时将它们全部保存在人类 RAM 中。
那么这是否意味着如今一个体面的(但不是超人的)程序员通过编写 C 比编写手写汇编程序产生更快的代码,至少在为现代 CPU 编码时?
我想到的另一种可能性。优化是在高级语言变成汇编程序之前发生的,还是之后发生的?如果是之后……会不会是更快地产生手写汇编程序,然后通过编译器的优化过程?
最近当我为编程挑战编写一些代码时出现了这个问题,其本质是生成一个应该在 Raspberry Pi 上尽可能快地运行的例程。我本来可以用汇编程序编写它;但我的猜测是,精心编写的 C 语言会更快,尽管 Pi 处理器在 2014 年并没有那么复杂。
为了使问题更加具体和具体:
最佳答案
在我看来,到目前为止给出的两个答案都是正确的。除其他外,答案取决于我们正在谈论的特定 CPU 架构。架构越复杂,手工编写高效的 ASM 代码就越困难。
一方面是 CISC 内核,例如 x86。它们有多个执行单元、长管道、每条指令的可变指令延迟等。在许多情况下,对人类来说看起来“干净”或“最佳”的 ASM 代码实际上对于 CPU 来说并不是最佳的,可以通过使用指令来改进或来自处理器手册黑暗角落的技术。编译器“知道”这一点,并且可以生成经过适当优化的代码。诚然,在许多情况下,熟练的人可以改进发出的代码,但使用正确的编译器和优化设置,代码通常已经非常好。此外,使用手头的 C 代码,您无需为每一代新的 CPU 手动重新优化它(是的,优化通常取决于特定的 CPU 系列,而不仅仅是指令集),所以用 C 编写是一种“面向 future ”您的代码。
另一方面是简单的 RISC 内核,例如 8051(或其他简单的 8 位 Controller )。它们具有更简单的调度语义和更小的指令集。编译器在这里仍然做了不错的优化工作,但是手动编写一个像样的 ASM 代码(或修复发出的代码中的性能问题)也简单得多。
关于c - *在实践中* : decent C code, 或体面的手写汇编程序哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469489/
问题 夏洛克·福尔摩斯对他的大敌莫里亚蒂教授越来越偏执。他所有想要制服莫里亚蒂的努力都白费了。这些天夏洛克正在和华生医生一起解决一个问题。沃森提到,中央情报局最近在他们的 super 计算机“野兽”上
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我的 C++ 程序在编译时遇到问题,它是一个递归的不错的解析器,规则如下: slist :: = stmt slist | stmt stmt ::= decl | assign | print de
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
如何使用 5 个 .sh 脚本来演示 Chronicle 的区 block 链账本技术... ./run.shm 和#params 需要吗? 16467@DESKTOP-EQDBIQA> pwd /c
我正在使用 Jersey 。 这是我的 jboss 部署结构:
我正在用 Rails 构建一个应用程序,允许用户将图像上传到他们自己的画廊。图片以 3 种尺寸显示(目前:原始尺寸、中号尺寸、拇指尺寸),并在上传每个文件时调整尺寸(我正在使用 carrierwave
我最近在 msdn 上的 Entity Framework 论坛中遇到了一个问题: http://social.msdn.microsoft.com/Forums/en-US/adodotnetent
我是一名优秀的程序员,十分优秀!