問題タブ [inlining]
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.
postgresql - Postgres がサブクエリをインライン化しないようにするにはどうすればよいですか?
以下は、Postgres 9.1.6 での遅いクエリです。最大カウントは 2 ですが、両方の行が主キーによって既に識別されています: (4.5 秒)
うーん、おそらく、最初に主キー部分だけでサブクエリを実行すると...: (いいえ、まだ 4.5 秒以上)
Postgres がサブクエリをインライン化しないようにするにはどうすればよいですか?
背景: hstoreを使用し、GiST インデックスを持つ Postgres 9.1 テーブルがあります。
php - 彼らは、HTML の JavaScript コードは悪い慣行と考えていると言いましたが、これを解決するにはどうすればよいですか?
だから、JavaScriptをHTMLに混ぜるのは頭の中でも悪いことだと理解しています。しかし、このコードを見てみましょう(リストからアイテムを削除したい)
このリストは PHP によって生成されます。deleteThisItemById() は外部.js
ファイルにあります。これはまだ悪いと見なされますか?もしそうなら、標準的な解決策は何ですか?未加工の JavaScript と同様に、jQuery も使用できます。
gnuplot - テキストファイルなしでマルチプロットデータをgnuplottingする
textfile なしで Gnuplotting データを読みましたが、同じことをしたいのですが、「マルチプロット」を使用します。私は現在持っています:
でデータをインライン化したいdata.csv
。
c++ - ラムダの速度と関数のインライン展開
ラムダ関数の速度に問題があります。コードは次のとおりです。
for_each_lit
関数のシグネチャは次のとおりです。
この関数lit_diff_watches
は何百万回も実行され、例では 3.3 秒かかります。ただし、スイッチのコメントを外してコメント アウトするとfor_each_line
(スイッチのコピー アンド ペースト)、まったく同じ実行で 1.7 秒が得られます。99% の確率で発生することに注意してくださいwatch_binary_t
。つまり、関数呼び出しwatch_tertiary_t
ごとに実行される命令はごくわずかです。lit_diff_watches
私が間違っていることを教えてください。動作は GCC 4.7 と現在の llvm-svn (2013 年 11 月 25 日) の両方で同じですが、タイミングの違いはわずかです。関数呼び出しはインライン化されていないと推測していますが、私は専門家ではありません。switch(..){..}
これはコードの多くの場所にあり、ラムダ & を使用するとコードfor_each_lit
が大幅にクリーンアップされるため、これを修正したいと思います。しかし、これ以上スピードを落とすわけにはいきません。10 ~ 20% であれば問題ありませんが、ほぼ 2 倍の速度低下は大きすぎます。
gcc - 単純なアセンブリ関数のインライン化
私は古い答えに従おうとしましたが、何か間違ったことをしているに違いありません:関数はインライン化されていません(逆アセンブリでまだ呼び出されています)。これが私がしたことです:
get_regs.h:
inline unsigned long __get_esp(void) {
__asm__("movl %esp,%eax");
}
program.c:
...
#include "get_regs.h "
...
extern unsigned long __get_esp(void);
...
tmp = __get_esp();
次のようにコンパイル (さまざまな理由によるその他のオプション):
gcc -g -fno-stack-protector -mpreferred-stack-boundary=2 program.c
これは、ヘッダー ファイルに定義を含めるという 2 番目の推奨事項に従います。
拡張アセンブリを使用して結果を から にコピーできることは%eax
わかっtmp
ていますが、インライン化を行うことを理解したいと思います。SOでいくつかのヒットを見つけましたが、私のケースをカバーしているようには見えませんでした。
システム:
- Ubuntu 12.04
- gcc 4.6.3。
- x86 32 ビット
c++ - インライン関数を使用するプログラムは、リンクの順序とパラメーターによって異なる動作をするのはなぜですか?
これに対する答えはわかっていますが、それを分析して楽しむことができます。そして、私たちは楽しみながら学びます!
これらのテストには gcc 4.1.2 を使用しました。
まず第一に、インライン関数は異なる翻訳単位で異なる定義を持つため、このコードは標準ではありません。そんなこと知ってる。しかし、何が起こっているのかを分析して、私が作る 3 つの質問に答えてみましょう。私たちはそれから学びます:)
ファイルをシンプルに保ちます (たとえば、#ifndef ガードはありません)。
これらのファイルがあるとします:
インクリメント.h :
decrement.h :
decrement.cpp :
main.cpp :
この Makefile でそれらをコンパイルすると:
出力は次のとおりです。
Makefile から -O2 フラグを削除すると、次のようになります。
出力は次のとおりです。
main.o と decrement.o の順序も変更した場合 (先ほど行ったように -O2 フラグを付けずに残します):
結果は次のとおりです。
ここで何が起こっているのですか?-O2 フラグとオブジェクト ファイルのリンク順序によって、出力がこのように変わるのはなぜですか?