defineの専門家に質問 - ページ 3

 
Alexandr Andreev:


みんな分かっているようですが......。

だからこれは、これから道を歩む人のために...。

我々は、このメソッドは、もし(a!=5)Print(a)で動作するときにマイナスを持っているので、残りの部分を均等にし、statクラスでそれをすべてラップすることができます。これは動作しません、あなたは常にもし(a!=5){Print(a)}、クラスであなたがこの瞬間を修正することが できます書く必要がありますが、私はあまりにも怠惰だ))と一般的には、それはすべてが歴史のアーカイブにあるよう です。

クラスと同じように、staticメソッドでデータを初期化し、operatorコールを組み合わせてprint...。とすると、if (a!=5) Print(a); , it will work

これはすべて怠慢からくるものです。調子に乗ってしまったが、あきらめた。プリントの他に、ファイルへの書き込み は、データを集めるか、アルゴリズムを練る、設定する。そして、プリントに所定のトングを点数化すると、コンマがプリントされます。すべては、もちろん脳を鍛えるためですが、道筋すら示さないのです。

 
Alexandr Andreev:



ドミトリー・フェドセーエフ


ウラジミール・シマコフ


たまたまですが、質問させていただいてもよろしいでしょうか。コンパイラのdefineとfunction callの 違いは何ですか。という結論に至ったのです。私の思い違いでしょうか?

 
Valeriy Yastremskiy:

たまたまですが、質問させていただいてもよろしいでしょうか。コンパイラのdefineとfunction callの 違いは何ですか。という結論に至ったのです。私の思い違いでしょうか?

DefineはBEFOREコンパイル時に置換されるため、__LINE__が正確になるように、不完全なコード断片を置換することができます。

そして、関数は多くの言語でコード参照(goto)、その他の言語では実行時のコード置換(すべての関数を展開)である。

そして、defy はバグを見つけにくくするため、悪のようなもので、defy がないときが良いdefy です。
 
Alexandr Andreev:

定義 - コンパイル時に置換するので、__LINE__はあるべき姿になり、不完全なコードスニペットを置換することができます。

そして、関数は多くの言語でコード参照(goto)、その他の言語では実行時のコード置換(すべての関数を展開)である。

MKLについて質問です。ループを除いて実行ファイルにgotoが ないのは正しく理解しています。この問題は、編集の特殊性から発生した。厳格なトップダウンまた、ループ本体の下部で変数を宣言し、ループ条件内で呼び出すと警告が発生します。出力は上から下へチェックされます。また、実行ファイルは、goto 参照ではなく、defineとして関数を代入して生成されます。

 
Alexandr Andreev:

定義 - コンパイル時に置換するので、__LINE__はあるべき姿になり、不完全なコードスニペットを置換することができます。

多くの言語では関数はコードへの参照(goto)であり、他の言語では実行時にコードが代入(全ての関数を展開)される。

置換はコンパイル時のビルド速度にしか影響しないということですか?
大規模なプロジェクトを 構築するときだけ合理的なのでしょうか?
それとも、デファクトスタンダードコードの方が実行速度が速いのでしょうか?

 
Valeriy Yastremskiy:

MKLとの関連で質問です。ループを除いて実行ファイルにgotoが ないのは正しく理解しています。この問題は、編纂の特殊性から発生した。厳格なトップダウンまた、ループ本体の下部で変数を宣言し、ループ条件内で呼び出すと警告が発生します。出力は上から下へチェックされます。また、実行ファイルは、goto 参照ではなく、defineとして関数を代入して生成されます。

いや、mclは2008年に間違いなくコードリファレンス方式を採用した。

現在、フルアンローリングが使われているかどうかは、明らかではない。

今では、どのコンピュータサイエンス学部でも、自分でコンパイラを書くのは3〜4年です。

リファレンスがあったり、デフォールディングがあったりと、ややこしいですが、とにかく好きなようにコードを書くことができます。

おそらく、開示できるものは開示するが、すべてを開示することはないだろう。forなどの演算子は別物であることは明らかです。

 
Roman:

置換はコンパイル時のビルド速度にしか影響しないということですか?
大規模なプロジェクトを構築するときだけ合理的なのでしょうか?
それとも、消滅したコードも実行ファイルでは高速に実行されるのでしょうか?

通常の機能を展開すること自体が

i.e 例えば for (int i=0; i<ArraiSize(max); i++)

ここでArraiSize(max); が展開され、与えられた配列のサイズに対するアドレスのようなものが得られます(配列を見ると、そのサイズは変数にあり、ここではこの変数の代わりに「メモリ上のアドレス」が得られます)、つまり、それ自体を変数に変更する意味は 全くありません。

for (int i=0; i<ArraiSize(max); i++)

и

for (int i=0; i<size; i++)

この場合、ArraiSize(max)とsizeは 配列のサイズ 値を決定するタイミングが同じになります

 
Alexandr Andreev:

いいえ、μlは2008年に間違いなくコードリファレンス方式を採用しました。

現在、フルアンローリングが使われているかどうかは、明らかではない。

今や、自分でコンパイラを書くのは、どこのコンピュータサイエンス学科でも3~4年目です。

リファレンスがあったり、デフォールディングがあったりと、ややこしいですが、とにかく好きなようにコードを書くことができます。

おそらく、開示できるものは開示するが、すべてを開示することはないだろう。forなどの演算子は全く別の話であることは明らかです。

ありがとうございます。現在進行中のErrors and Bugsというトピックから判断すると、最適化がすべてなのでしょう...。まあ、光につながる悪のようなものですが)))) 車もこのままでは永遠の修理です。)

 
Roman:

置換はコンパイル時のビルド速度にしか影響しないということですか?
大規模なプロジェクトを構築するときだけ合理的なのでしょうか?
それとも、デファクトスタンダードコードの方が実行速度が速いのでしょうか?

1 - おそらくそうでしょうが、マイクロ秒単位です =)

2 - むしろその逆で、最短の定義と最小のものを使うべきでしょう。

3 - 2008年では、この文はμl4について当てはまるでしょう。しかし、これで速度は同じになります

 
Alexandr Andreev:

正常な機能の展開は自明である

i.e 例えば for (int i=0; i<ArraiSize(max); i++)

ここでArraiSize(max); が展開され、与えられた配列のサイズに対するアドレスのようなものが得られます(配列を見ると、それはそのサイズを変数に持ち、ここではこの変数「メモリ内のアドレス」に代入しています)

for (int i=0; i<ArraiSize(max); i++)

и

for (int i=0; i<size; i++)

この場合、ArraiSize(max)とsizeは、配列のサイズ値を決定するタイミングが同じに なります

このサンプルループでは、タイミングについて意見が分かれたと思います。
逆に、結果をサイズ変数で取得し、それを条件に使うことをお勧めします。
ArraiSize(max) 反復ごとに、ループが不必要に巻き戻され、ループの実行速度が遅くなるからです。
それは、アセンブラコードに不要な命令です。