問題タブ [virtual-functions]
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.
java - 同等の改善比較パフォーマンス
コードのプロファイリングを行ったところ、 を実装するクラスがComparable<T>
8 倍の CPU 時間を消費していることがわかりました。
よりも
スローダウンは、このメソッドの仮想テーブル ルックアップが原因であると想定しています。
関数の静的呼び出しを強制する方法はありますか? (非仮想 C++ メソッドと同様)
このオブジェクトで
Comparable<T>
使用するため、インターフェイスを引き続き使用したいので、このコードを書き直したくありません。編集:いいえ、私はcompareTo(Object)
を実装しませんでした-これは自動的に生成され、プロファイラーによって報告されましたTreeSet
c++ - この間接的な関数呼び出しの利点は何ですか?
ライブラリで次のコードを見つけました。
今、私は疑問に思っています: なぜこの間接化を使用するのでしょうか? 上記が単純な代替手段よりも優れている理由は何かありますか?
c++ - C++ クラスに仮想メソッドがある場合のパフォーマンス コストはどれくらいですか?
C++ クラス (またはその親クラスのいずれか) に少なくとも 1 つの仮想メソッドがあるということは、そのクラスに仮想テーブルがあり、すべてのインスタンスに仮想ポインターがあることを意味します。
したがって、メモリのコストは非常に明確です。最も重要なのは、インスタンスのメモリ コストです (特にインスタンスが小さい場合、たとえば整数を格納するだけの場合: この場合、すべてのインスタンスに仮想ポインターがあると、インスタンスのサイズが 2 倍になる可能性があります。仮想テーブルによって使用されるメモリ スペースは、実際のメソッド コードによって使用されるスペースと比較して、通常は無視できると思います。
これは私の質問に私をもたらします: メソッドを仮想化するための測定可能なパフォーマンス コスト (つまり、速度への影響) はありますか? メソッド呼び出しごとに、実行時に仮想テーブルでルックアップが行われるため、このメソッドへの呼び出しが非常に頻繁で、このメソッドが非常に短い場合、測定可能なパフォーマンス ヒットが発生する可能性があります。プラットフォームにもよると思いますが、ベンチマークを実行した人はいますか?
私が尋ねている理由は、プログラマーがメソッド virtual の定義を忘れたことが原因で発生したバグに遭遇したからです。この種の間違いを見るのはこれが初めてではありません。そして、私は考えました: virtual キーワードが必要ないことが絶対に確実なときに削除するのではなく、必要なときに virtual キーワードを追加するのはなぜですか? パフォーマンス コストが低い場合は、チーム内で単純に次のことをお勧めします。すべてのクラスで、デストラクタを含むすべてのメソッドをデフォルトで仮想化し、必要な場合にのみ削除します。それはあなたにとってクレイジーに聞こえますか?
c++ - 仮想代入演算子 C++
C++ の代入演算子は仮想化できます。なぜそれが必要なのですか?他のオペレーターも仮想化できますか?
c++ - オーバーライドしている場合、基本クラスの仮想関数を呼び出すことはできますか?
クラスがFoo
あり、Bar
次のように設定するとします。
コードに注釈が付けられているように、オーバーライドしている基本クラスの関数を呼び出せるようにしたいと考えています。Java にはsuper.funcname()
構文があります。これは C++ で可能ですか?
c++ - gcc での仮想関数呼び出しの高速化
gprof を使用して C++ コードのプロファイリングを行ったところ、時間のかなりの部分が 1 つの仮想メソッドを何度も呼び出すことに費やされていることがわかりました。メソッド自体は短く、仮想でない場合はおそらくインライン化できます。
仮想にならないようにすべて書き直す以外に、これを高速化する方法は何ですか?
c++ - 代入演算子はさまざまなタイプのオブジェクトで機能しますか?
ごめん。エラーが発生しました。代入演算子は有効ですか?またはこれを達成する方法はありますか?【AクラスとBクラスの関係はありません。】
どうもありがとう。
c++ - C++ に仮想コンストラクターがないのはなぜですか?
C++ に仮想コンストラクタがないのはなぜですか?