问题标签 [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.

0 投票
11 回答
36444 浏览

c - Duff 的设备是如何工作的?

在 Duff 的设备上阅读了 Wikipedia 上的文章,但我不明白。我真的很感兴趣,但是我已经阅读了几次那里的解释,但我仍然不明白 Duff 的设备是如何工作的。

更详细的解释是什么?

0 投票
2 回答
2436 浏览

java - Duff 的设备会加速 Java 代码吗?

使用现有的 Sun 1.6 编译器和 JRE/JIT,使用 Duff 的设备示例的扩展展开来展开循环是否是个好主意?或者它最终会成为没有性能优势的代码混淆?

我使用的 Java 分析工具在逐行 CPU 使用方面的信息不如 valgrind,因此我希望通过其他人的经验来增加测量。

请注意,当然,您不能对Duff 的设备进行精确编码,但您可以进行基本的展开,这就是我想知道的。

通过许多其他值。

0 投票
13 回答
899 浏览

c - 我可以在 C 中的数组上使用 Duff 的设备吗?

我在这里有一个循环,我想让它运行得更快。我正在传递一个大数组。我最近听说达夫的设备可以应用于这个for循环吗?有任何想法吗?

0 投票
3 回答
537 浏览

c++ - 实用的循环展开技术

我正在寻找一个实用的循环展开技术示例。

我认为达​​夫的设备是一个不错的提示。
但是Duff 的设备的目的地永远不会增加。它可能对将数据复制到串行设备的嵌入式程序员有用,而不是一般程序员。

你能给我一个很好的有用的例子吗?
如果你曾经在你的真实代码中使用过它,它会更好。

0 投票
5 回答
1905 浏览

c++ - Duff的设备代码如何编译?

我明白为什么Duff 的设备比可以展开但未优化的普通循环代码更快。但我还不明白如何编译代码。
我想这是关于switch语法的一个技巧。但现在不是了。

切换语句中存在while语句怎么办?很奇怪。 有谁能解释一下吗?

编辑: 另一个问题。为什么 duff 使用 8?它可以是 16、65536 或其他。因为代码大小?还有别的原因吗?例如,缓存或流水线的好处。

0 投票
2 回答
595 浏览

php - 无法使用 PHP 中的 Duff 设备?

有人告诉我 duff 设备不适用于 PHP,因为 switch 和 case 构造的工作方式不同。我在 php.net 上找到了这个 duff devive,我的问题是这个设备有什么问题?还是我不了解 duff 设备?在我的汇编器中,我可以用一个简单的命令展开一个循环,当它编译时,我得到一个展开的循环。

0 投票
2 回答
3340 浏览

c - 嵌套案例语句

有人可以解释将case语句嵌套到另一个中吗?我指的是 Duffs 设备,其中所有其他case语句都在do-whilecase 0. 我无法理解它。在我看来,它应该像嵌套的if. 但后来我肯定错过了一些东西。请解释。

0 投票
3 回答
1568 浏览

c - 带有 do-while 交错的 C switch 语句

可能重复:
达夫的设备是如何工作的?

我试图了解这是如何工作的。任何帮助,将不胜感激。

基本上,如果 switch case 评估为 case 语句 2,则不会执行 while 的 do 语句。但是我运行了这个程序,它给了我输出,但无法解释:
输出:

3
n=1 计数 =3
案例 3
案例 2
案例 1

0 投票
3 回答
1044 浏览

c++ - 修改 Duff 设备的语法 - 这是合法的 C/C++ 吗?

就在昨晚,我第一次遇到了好奇的达夫装置。我一直在阅读它,我认为理解它并不令人生畏。我很好奇的是奇怪的语法(来自维基百科):

我正在阅读switch 语句的 C++ 标准定义(如果它已经过时,请告诉我,我不熟悉 Open-Std.org)。据我所知,case 语句只是用于 switch 语句的简化跳转语句。

switch 本身完全忽略了嵌套的 do-while,循环忽略了 case 语句。由于开关在循环内部跳转,因此循环被执行。开关用于覆盖余数(除以 8),循环处理可整除的部分。这一切都说得通。

那么我的问题是为什么笨拙的语法?我突然想到,可以编写循环以使所有 case 语句都包含在其中,是吗?我在标准中看不到任何禁止这种行为的内容,并且它在 GCC 4.7 下可以正确编译,所以以下内容是否合法?

对我来说,这使代码的意图更加清晰。感谢您的任何反馈。;)

编辑:如下所述,原始代码是为 C 编写的,并且对countn变量具有隐式 int 。由于我将其标记为 C++,因此我对其进行了修改。

编辑 2:修改了修改后的示例代码以解决无效的计数值。

0 投票
2 回答
1474 浏览

c - 切换案例奇怪的范围

查看一些第 3 方 C 代码时,我遇到了类似的情况:

在我正在审查的代码中,这似乎只是一个错字,但我很惊讶它编译时没有出错。

为什么这是有效的 C?
与在预期位置关闭大括号相比,此代码的执行有什么影响?
有什么情况可以使用吗?

编辑:在示例中,我查看了所有中断(如上所述)-但答案也可能包括如果在情况 0 或 1 中不存在中断的行为。