問題タブ [inline-method]
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.
.net - 最適化をインライン化する方法は競合状態を引き起こす可能性がありますか?
この質問に見られるように: 拡張メソッドを使用してC#イベントを発生させる-それは悪いですか?
この拡張メソッドを使用してイベントを安全に発生させることを考えています。
しかし、Mike Rosenblumは、JonSkeetの回答でこの懸念を提起しています。
[MethodImpl(MethodImplOptions.NoInlining)]属性をこれらの拡張メソッドに追加する必要があります。そうしないと、デリゲートを一時変数にコピーする試みがJITterによって最適化され、null参照例外が発生する可能性があります。
拡張メソッドがNoInliningでマークされていない場合に競合状態が発生するかどうかを確認するために、リリースモードでいくつかのテストを行いました。
リリースモードでしばらくテストを実行しましたが、NullReferenceExceptionが発生することはありませんでした。
それで、マイク・ローゼンブラムは彼のコメントで間違っていましたか、そしてメソッドのインライン化は競合状態を引き起こすことができませんか?
実際、本当の問題は、SaifeRaiseが次のようにインライン化されるかどうかだと思います。
また
c# - c# がインライン匿名ラムダまたはデリゲートを使用できないのはなぜですか?
質問のタイトルを適切に表現したことを願っています。
C# では、(デリゲートとして) ラムダを使用するか、古いデリゲート構文を使用してこれを行うことができます。
では、ラムダまたはデリゲートの本体を「インライン化」して、名前付き変数にキャプチャする (匿名にする) ことができないのはなぜでしょうか?
JavaScript で動作する例 (比較のみ) は次のとおりです。
これにより、予想されるアラート ボックスが生成されます。
更新:適切にキャストすれば、C# でインラインの匿名ラムダを使用できるようですが、() の量によって手に負えなくなり始めます。
おそらく、コンパイラは匿名デリゲートの署名を推測して、どの Console.WriteLine() を呼び出そうとしているのかを知ることができませんか? この特定のキャストが必要な理由を知っている人はいますか?
c++ - インライン関数でコードを繰り返さないようにするにはどうすればよいですか?
作業中に繰り返しコードがあり、それを取り除きたいので、C ++ではマクロを使用するのは良い考えではありませんが、代わりにインライン関数を使用する必要があります。この関数をインラインとして使用するのは良い考えです。 :
この機能は非常に危険だと思います。コードを改善するにはどうすればよいですか?
c++ - C++ のインライン関数
これは、c++ のインライン関数に関する小さな質問です。
C++ でのコンパイルのどの段階で、呼び出し時にインライン関数が実際にインライン化されますか?
それは基本的にどのように機能しますか。
プログラマーが関数の前に inline キーワードを指定して要求した後、コンパイラーが特定の関数をインライン化する必要があると判断した場合、コンパイラーがプログラマーに対してそれを行うのはいつですか.iはコンパイルのどの段階を意味します.
cマクロが展開されるような前処理段階ですか?
c++ - インラインコンストラクタ?この動作について説明する[C++]
このコードを検討してください
ここですべてが良いです!
今、私はこの修正を行います。Dummy の宣言を「dummy.h」に移動します。
そして、コンストラクタ Dummy() を "dummy.cpp" で次のように定義します。
そして最後に、メインファイルは次のとおりです。
正常にコンパイルされますが、Dummy::Dummy() への未定義の参照を訴えるリンカ エラーが発生します。
あらゆる洞察。
--
c++ - 同じ if ステートメントを持つ C++ インライン メソッド
私は OpenGL テクスチャのハンドラーを書いており、安全性とパフォーマンスについて考えています。マークされた if ステートメントを削除する最適化レベルはどれですか?
c++ - C++ テンプレートとインライン
単純な (非テンプレート) クラスを作成しているときに、関数の実装が「その場で」提供されている場合、それは自動的に として扱われinline
ます。
テンプレートベースのクラスについて話すとき、このルールはどうでしょうか?
また、inline
ルールはネストされていないテンプレート関数にどのように適用されますか?
ここで最初のケースと 2 番目のケースでは何が起こるでしょうか?
ありがとうございました。
c# - 条件付きでクイックインラインメソッドを実行するには?
これは私がやりたいことです:
それは可能ですか?
c++ - インライン演算子は優れていますか?
C++ でインライン化する演算子と他のメソッドに違いはありますか? 私はそれを検索しましたが、私が見るように、それは一般的な質問ではありません. それを使用または回避する強い理由がある人はいますか? 注: 明らかに、インライン演算子が小さい場合を意味します。
c++ - 最新の C++ でのインライン メソッドとコードの読みやすさ
さて、私の「コーディング脳」がギアをスキップすることがあります。ときどき歯車のきしむ音が聞こえます。(たとえば、私は時々 class Foo : Bar {}
、もう適切ではないことを思い出す前に書いています-そして長い間そうではありませんでした)。
私の現在の MO は、速度を犠牲にすることなくコードの読みやすさと保守性を向上させる方法としてインライン メソッドを使用することですが、最近、この方法に疑問を抱かせる問題に遭遇しました。
したがって、次のような(明らかに不自然な)コードが与えられます。
私は書く:
私が今取り組んでいる数学はかなり複雑です。一般的な CS/CE でそれを維持できるようにしたい場合は、2 番目のように記述する必要があります。コードはまた、かなり時間に敏感です。
上で述べたように、私は最近問題に出くわしました。私は自分の数学的定数static const double ...
を小さなプログラマーのように作りました。しかし、それらにインラインでアクセスしようとすると、コンパイラは DLL を探し出します。ターゲット OS は Linux ですが、私は Windows (Visual Studio 2013) で開発しており、「クロスプラットフォーム セーフ」に保ちたいと考えています。
この小さな問題の解決策は、それらをアウトオブラインにすることです。しかし、それは私のパフォーマンスを損なうでしょうか?関連する難解な数学を考えると、読みやすさは深刻な問題です。しかし、それでもうまく機能する必要があります。
アップデート:
明確にするために、より多くの/異なる-そしてはるかに不自然な-コードを使用します。
このコードは、両方のプラットフォームの Static で問題なく動作します。Linux では共有ライブラリとして機能します。DLL として使用しようとすると、Windows でエラーが発生します。唯一の解決策は、CheckValue
メソッドを行外に移動することです。
「古い学校」ではinline
、CheckValue
メソッドのコードが呼び出された場所で「そのまま」置換されていました。どうやら「新しい学校」のインラインは...何もしないのですか?(コンパイラはどうやら必要なことに関係なく実行するためです。)
AFIK DLL の下でこれを機能させる唯一の方法は、CheckValue
アウトオブラインに移動することです...これは、時間に敏感なコード「古い学校」では問題になる可能性があります (すべての呼び出しは、関数のオーバーヘッドが保証されている/保証されていました)。これはまだ問題がありますか? これを読みやすくする「より良い」方法はありますか。たとえば、私のコードに取り組んでいるすべての CS/CE が統計学に習熟していると仮定しないでください。
注:これはクロスプラットフォームであるため、「コンパイラ」は意味のある表現ではない場合があります。