問題タブ [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 - ダフのデバイスはどのように機能しますか?

ダフのデバイスでウィキペディアの記事を読みましたが、よくわかりません。とても興味がありますが、説明を何度か読みましたが、ダフのデバイスがどのように機能するのかまだわかりません。

より詳細な説明は何でしょうか?

0 投票する
2 に答える
2436 参照

java - Duff's DeviceはJavaコードを高速化しますか?

標準のSun1.6コンパイラとJRE/JITを使用して、Duff's Deviceに例示されているような大規模な展開を使用して、ループを展開することをお勧めしますか?それとも、パフォーマンス上の利点がなく、コードが難読化されてしまうのでしょうか。

私が使用したJavaプロファイリングツールは、たとえばvalgrindよりも行ごとのCPU使用率についての情報が少ないため、他の人の経験で測定を強化することを検討していました。

もちろん、 Duff's Deviceを正確にコーディングすることはできませんが、基本的な展開を行うことはできます。それが私が疑問に思っていることです。

他の多くの値を下に移動します。

0 投票する
13 に答える
899 参照

c - C の配列で Duff の Device を使用できますか?

ここにループがあり、より高速に実行したいと考えています。大きな配列を渡しています。最近、Duff の Device を for ループに適用できると聞きました。何か案は?

0 投票する
3 に答える
537 参照

c++ - 実用的なループ展開テクニック

実用的なループ展開手法の例を見つけています。

ダフのデバイスはいいヒントだと思います。
しかし、ダフのデバイスの目的地は決して増加しません。一般的なプログラマーではなく、シリアルデバイスにデータをコピーする組み込みプログラマーに役立つ可能性があります。

素敵で便利な例を教えてください。
実際のコードで使用したことがある場合は、より優れたものになります。

0 投票する
5 に答える
1905 参照

c++ - Duffのデバイスコードはどのようにコンパイルできますか?

Duffのデバイスが、展開できるが最適化されていない通常のループコードよりも高速である理由を理解しました。しかし、コードをどのようにコンパイルできるかはまだわかりません。
私はそれがスイッチ構文についてのトリックだと思います。もうそうじゃない。

センテンスがスイッチセンテンスに存在する間、どうすればよいですか?とても奇妙です。 これを説明できる人はいますか?

編集: 別の質問。なぜダフは8を使用したのですか?16、65536などになります。コードサイズのため?別の理由はありますか?たとえば、キャッシュやパイプラインのメリット。

0 投票する
2 に答える
595 参照

php - PHPのDuffデバイスは不可能ですか?

スイッチとケースの構成が異なるため、duffデバイスはPHPでは機能しないと言われています。私はこのダフがphp.netで逸脱しているのを見つけました、私の質問はこのデバイスの何が問題なのですか?それとも私はダフデバイスを理解していませんでしたか?私のアセンブラーでは、簡単なコマンドでループを展開でき、コンパイルすると展開されたループが表示されます。

0 投票する
2 に答える
3340 参照

c - ネストされた case ステートメント

caseステートメントを別のステートメントにネストすることを説明してください。他のすべてのステートメントが に関連付けられたループ内にあるDuffs Deviceについて言及して います。私はそれを理解することができません。ネストされた のように振る舞うべきだと私には思えます。しかし、私は間違いなく何かが欠けています。説明してください。casedo-whilecase 0if

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++ - ダフのデバイスの構文の改訂 - これは合法的な C/C++ ですか?

昨夜、好奇心旺盛なダフの装置に初めて遭遇しました。私はそれについていくつか読んでいますが、理解するのはそれほど難しいことではないと思います。私が興味を持っているのは、奇妙な構文です(ウィキペディアから):

switch ステートメントの C++ 標準定義を読んでいました(それが古い場合はお知らせください。Open-Std.org に詳しくありません)。私が理解できる限り、case ステートメントは、switch ステートメントで使用する単純化されたジャンプ ステートメントです。

スイッチ自体はネストされた do-while を完全に無視し、ループは case ステートメントを無視します。ループ内でスイッチがジャンプするので、ループが実行されます。スイッチは (8 による除算の) 剰余をカバーするためにあり、ループは均等に割り切れる部分を処理します。これはすべて理にかなっています。

私の質問は、なぜぎこちない構文なのですか? すべての case ステートメントがその中に含まれるようにループを書くことができると思います。標準にはこの動作を禁止するものは何も見当たらず、GCC 4.7 で正しくコンパイルされるため、以下は合法と見なされますか?

これにより、コードの意図がより明確になります。フィードバックをお寄せいただきありがとうございます。;)

編集:以下に示すように、元のコードは C 用に書かれており、count変数とn変数に暗黙的な int がありました。C++ のタグを付けたので、それを変更しました。

編集 2:無効なカウント値を考慮して、改訂されたサンプル コードを修正しました。

0 投票する
2 に答える
1474 参照

c - 変なスコープの大文字と小文字を切り替える

サードパーティの C コードを確認すると、次のようなものに出会いました。

私がレビューしていたコードは単なるタイプミスのように見えましたが、エラーなしでコンパイルされたことに驚きました。

なぜこれは有効な C なのですか?
予想される場所でブレースを閉じる場合と比較して、このコードの実行にどのような影響がありますか?
これが役に立つ場合はありますか?

編集:例では、すべてのブレークが存在することを確認しました(上記のように)-ただし、ケース0または1でブレークがない場合の動作も回答に含まれる可能性があります。