问题标签 [duffs-device]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Duff 的设备是如何工作的?
我在 Duff 的设备上阅读了 Wikipedia 上的文章,但我不明白。我真的很感兴趣,但是我已经阅读了几次那里的解释,但我仍然不明白 Duff 的设备是如何工作的。
更详细的解释是什么?
java - Duff 的设备会加速 Java 代码吗?
使用现有的 Sun 1.6 编译器和 JRE/JIT,使用 Duff 的设备示例的扩展展开来展开循环是否是个好主意?或者它最终会成为没有性能优势的代码混淆?
我使用的 Java 分析工具在逐行 CPU 使用方面的信息不如 valgrind,因此我希望通过其他人的经验来增加测量。
请注意,当然,您不能对Duff 的设备进行精确编码,但您可以进行基本的展开,这就是我想知道的。
通过许多其他值。
c - 我可以在 C 中的数组上使用 Duff 的设备吗?
我在这里有一个循环,我想让它运行得更快。我正在传递一个大数组。我最近听说达夫的设备可以应用于这个for循环吗?有任何想法吗?
c++ - 实用的循环展开技术
我正在寻找一个实用的循环展开技术示例。
我认为达夫的设备是一个不错的提示。
但是Duff 的设备的目的地永远不会增加。它可能对将数据复制到串行设备的嵌入式程序员有用,而不是一般程序员。
你能给我一个很好的有用的例子吗?
如果你曾经在你的真实代码中使用过它,它会更好。
c++ - Duff的设备代码如何编译?
我明白为什么Duff 的设备比可以展开但未优化的普通循环代码更快。但我还不明白如何编译代码。
我想这是关于switch语法的一个技巧。但现在不是了。
切换语句中存在while语句怎么办?很奇怪。
有谁能解释一下吗?
编辑: 另一个问题。为什么 duff 使用 8?它可以是 16、65536 或其他。因为代码大小?还有别的原因吗?例如,缓存或流水线的好处。
php - 无法使用 PHP 中的 Duff 设备?
有人告诉我 duff 设备不适用于 PHP,因为 switch 和 case 构造的工作方式不同。我在 php.net 上找到了这个 duff devive,我的问题是这个设备有什么问题?还是我不了解 duff 设备?在我的汇编器中,我可以用一个简单的命令展开一个循环,当它编译时,我得到一个展开的循环。
c - 嵌套案例语句
有人可以解释将case
语句嵌套到另一个中吗?我指的是 Duffs 设备,其中所有其他case
语句都在do-while
与case 0
. 我无法理解它。在我看来,它应该像嵌套的if
. 但后来我肯定错过了一些东西。请解释。
c - 带有 do-while 交错的 C switch 语句
可能重复:
达夫的设备是如何工作的?
我试图了解这是如何工作的。任何帮助,将不胜感激。
基本上,如果 switch case 评估为 case 语句 2,则不会执行 while 的 do 语句。但是我运行了这个程序,它给了我输出,但无法解释:
输出:
3
n=1 计数 =3
案例 3
案例 2
案例 1
c++ - 修改 Duff 设备的语法 - 这是合法的 C/C++ 吗?
就在昨晚,我第一次遇到了好奇的达夫装置。我一直在阅读它,我认为理解它并不令人生畏。我很好奇的是奇怪的语法(来自维基百科):
我正在阅读switch 语句的 C++ 标准定义(如果它已经过时,请告诉我,我不熟悉 Open-Std.org)。据我所知,case 语句只是用于 switch 语句的简化跳转语句。
switch 本身完全忽略了嵌套的 do-while,循环忽略了 case 语句。由于开关在循环内部跳转,因此循环被执行。开关用于覆盖余数(除以 8),循环处理可整除的部分。这一切都说得通。
那么我的问题是为什么笨拙的语法?我突然想到,可以编写循环以使所有 case 语句都包含在其中,是吗?我在标准中看不到任何禁止这种行为的内容,并且它在 GCC 4.7 下可以正确编译,所以以下内容是否合法?
对我来说,这使代码的意图更加清晰。感谢您的任何反馈。;)
编辑:如下所述,原始代码是为 C 编写的,并且对count和n变量具有隐式 int 。由于我将其标记为 C++,因此我对其进行了修改。
编辑 2:修改了修改后的示例代码以解决无效的计数值。
c - 切换案例奇怪的范围
查看一些第 3 方 C 代码时,我遇到了类似的情况:
在我正在审查的代码中,这似乎只是一个错字,但我很惊讶它编译时没有出错。
为什么这是有效的 C?
与在预期位置关闭大括号相比,此代码的执行有什么影响?
有什么情况可以使用吗?
编辑:在示例中,我查看了所有中断(如上所述)-但答案也可能包括如果在情况 0 或 1 中不存在中断的行为。