問題タブ [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 - ダフのデバイスはどのように機能しますか?
ダフのデバイスでウィキペディアの記事を読みましたが、よくわかりません。とても興味がありますが、説明を何度か読みましたが、ダフのデバイスがどのように機能するのかまだわかりません。
より詳細な説明は何でしょうか?
java - Duff's DeviceはJavaコードを高速化しますか?
標準のSun1.6コンパイラとJRE/JITを使用して、Duff's Deviceに例示されているような大規模な展開を使用して、ループを展開することをお勧めしますか?それとも、パフォーマンス上の利点がなく、コードが難読化されてしまうのでしょうか。
私が使用したJavaプロファイリングツールは、たとえばvalgrindよりも行ごとのCPU使用率についての情報が少ないため、他の人の経験で測定を強化することを検討していました。
もちろん、 Duff's Deviceを正確にコーディングすることはできませんが、基本的な展開を行うことはできます。それが私が疑問に思っていることです。
他の多くの値を下に移動します。
c - C の配列で Duff の Device を使用できますか?
ここにループがあり、より高速に実行したいと考えています。大きな配列を渡しています。最近、Duff の Device を for ループに適用できると聞きました。何か案は?
c++ - 実用的なループ展開テクニック
実用的なループ展開手法の例を見つけています。
ダフのデバイスはいいヒントだと思います。
しかし、ダフのデバイスの目的地は決して増加しません。一般的なプログラマーではなく、シリアルデバイスにデータをコピーする組み込みプログラマーに役立つ可能性があります。
素敵で便利な例を教えてください。
実際のコードで使用したことがある場合は、より優れたものになります。
c++ - Duffのデバイスコードはどのようにコンパイルできますか?
Duffのデバイスが、展開できるが最適化されていない通常のループコードよりも高速である理由を理解しました。しかし、コードをどのようにコンパイルできるかはまだわかりません。
私はそれがスイッチ構文についてのトリックだと思います。もうそうじゃない。
センテンスがスイッチセンテンスに存在する間、どうすればよいですか?とても奇妙です。
これを説明できる人はいますか?
編集: 別の質問。なぜダフは8を使用したのですか?16、65536などになります。コードサイズのため?別の理由はありますか?たとえば、キャッシュやパイプラインのメリット。
php - PHPのDuffデバイスは不可能ですか?
スイッチとケースの構成が異なるため、duffデバイスはPHPでは機能しないと言われています。私はこのダフがphp.netで逸脱しているのを見つけました、私の質問はこのデバイスの何が問題なのですか?それとも私はダフデバイスを理解していませんでしたか?私のアセンブラーでは、簡単なコマンドでループを展開でき、コンパイルすると展開されたループが表示されます。
c - ネストされた case ステートメント
case
ステートメントを別のステートメントにネストすることを説明してください。他のすべてのステートメントが に関連付けられたループ内にあるDuffs Deviceについて言及して います。私はそれを理解することができません。ネストされた のように振る舞うべきだと私には思えます。しかし、私は間違いなく何かが欠けています。説明してください。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++ - ダフのデバイスの構文の改訂 - これは合法的な C/C++ ですか?
昨夜、好奇心旺盛なダフの装置に初めて遭遇しました。私はそれについていくつか読んでいますが、理解するのはそれほど難しいことではないと思います。私が興味を持っているのは、奇妙な構文です(ウィキペディアから):
switch ステートメントの C++ 標準定義を読んでいました(それが古い場合はお知らせください。Open-Std.org に詳しくありません)。私が理解できる限り、case ステートメントは、switch ステートメントで使用する単純化されたジャンプ ステートメントです。
スイッチ自体はネストされた do-while を完全に無視し、ループは case ステートメントを無視します。ループ内でスイッチがジャンプするので、ループが実行されます。スイッチは (8 による除算の) 剰余をカバーするためにあり、ループは均等に割り切れる部分を処理します。これはすべて理にかなっています。
私の質問は、なぜぎこちない構文なのですか? すべての case ステートメントがその中に含まれるようにループを書くことができると思います。標準にはこの動作を禁止するものは何も見当たらず、GCC 4.7 で正しくコンパイルされるため、以下は合法と見なされますか?
これにより、コードの意図がより明確になります。フィードバックをお寄せいただきありがとうございます。;)
編集:以下に示すように、元のコードは C 用に書かれており、count変数とn変数に暗黙的な int がありました。C++ のタグを付けたので、それを変更しました。
編集 2:無効なカウント値を考慮して、改訂されたサンプル コードを修正しました。
c - 変なスコープの大文字と小文字を切り替える
サードパーティの C コードを確認すると、次のようなものに出会いました。
私がレビューしていたコードは単なるタイプミスのように見えましたが、エラーなしでコンパイルされたことに驚きました。
なぜこれは有効な C なのですか?
予想される場所でブレースを閉じる場合と比較して、このコードの実行にどのような影響がありますか?
これが役に立つ場合はありますか?
編集:例では、すべてのブレークが存在することを確認しました(上記のように)-ただし、ケース0または1でブレークがない場合の動作も回答に含まれる可能性があります。