私は最近アセンブリを学び始めました。インターネットを見てみると、アセンブリが無駄ではないと言う人がますます増えていますが、そのような時間と労力を必要とする言語でプログラムを作成する価値はありません高レベルの言語と比較して。高レベルの言語プログラムと低レベルのプログラムとの間の効率性は、現在注目されるほど顕著ではないのですか?もっと広く使われているようなアセンブリのような低レベルの言語がありますか?アセンブリーは唯一の低レベルプログラミング言語ですか、そうでない場合は最も広く使用されていますか?
答えて
は多くの場合、コンパイラは、開発者が書くことができるより多くの、より良いアセンブリを生成
、今日
高水準言語プログラムと に注意を払うのに十分な本当にさえ気にならない低 レベル1の間で効率です。コンパイラに打ち勝つことができる特定の開発者がいます。しかし、低レベルのコードを記述することは細部にもっと注意を払う必要があり、書くことや維持することは難しいですが、効率の面からアセンブラで実装されるのは、通常は小さなコードです。違いは目立つことがあります。しかし、開発者が誤った最適化を実行するかどうかは、目立たないこともあります。
マイケルAbrash's Graphics Programming Black Bookを読むことをお勧めします。これは、アセンブリと最適化+実生活からの素敵な話がたくさんあります。
さらに広く使用されているアセンブリのような別の低レベル言語がありますか?
アセンブラは、おそらく最も低いレベルアプリケーションのプログラミング言語です。他の唯一の手段は、手でバイナリコードを書くことですが、バイナリのオペコードはほとんど「言語」と呼ばれることはありません。
しかし、プログラミングはソフトウェアを超えています。ハードウェアもプログラムする必要があります。ハードウェアのプログラミングに使用できるハードウェア記述言語(HDL)があります(つまり、独自のCPUを作成することができます)。最も一般的なHDL言語はVerilogとVHDLです。
@kjh:どうぞよろしくお願いします。私はちょうどAmazonの本のためのばかげた価格に気づいた。無料でオンラインでも入手できます - http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/graphics-programming-black-book-r1698 –
ライティングアセンブリは、より簡単な時間で適切でした。 Cコンパイラのコードジェネレータがそれほどスマートではなく、マシンコードの実行時間を予測するのは簡単でした。
人間は、現代のコードジェネレーターに組み込まれたスマートも、細部への絶え間ない注意も克服できません。キャッシュプリフェッチを挿入するタイミングを正確に把握して、データが適切なタイミングで利用できるようにするために必要な詳細な情報。どのように並べ替え命令を使用すると、最高のスケーラビリティを得ることができます。そして、ジャンプターゲットが一直線に並ぶように、ちょうど正しい位置にnopsを挿入するループを機械的にアンロールする方法。また、SIMDによって提供される自動並列化を利用する方法。 Etcetera。そして、コードを変更するときにこれを1回だけ繰り返すのではなく、何度も繰り返します。
より高度な言語のコンパイラが毎日スマートになっています。これまでのアセンブラでは、パフォーマンスが大幅に向上する可能性があります。今日、コンパイラはこれらのトリックを多く実装しています。
例は、シフトの代わりに除算、スイッチ/ケースのためのジャンプテーブルのプログラムカウンタを操作し、それらは一度だけ使用される場合の関数をインライン化など
は依然としてoptimalisationの余地があるが、パフォーマンスの向上は非常に低く、より高いレベルの言語を使用して保守性を向上させる方が良いでしょう。
「アセンブリ」は実際にはさまざまな種類のコレクションです。それはあなたがプログラミングしているアーキテクチャに依存します。たとえば、x86のアセンブリは、ARM、MIPS、または考えられるアーキテクチャのアセンブリと大きく異なる可能性があります。これは、アセンブリがプロセッサが実行するバイナリコードの1対1の変換であるという事実によって引き起こされます。異なるアーキテクチャーは異なる命令セットを持つため、アセンブリ言語も異なります。
実際、アセンブリは単純なバイナリコードを書かずに行けることができる最低です。しかし、それは言語のグループではなく、特定の言語ではありません。したがって、例えばx86アセンブリなどについて話していて、それを同等の低レベルの別の言語と比較すると、他の言語も多種多様なアセンブリであることがわかります。そしてもう一度、それは別のアーキテクチャーのためであり、それほど有用ではないでしょう。
- 1. MySQLでサポートされているLinux用の低オーバーヘッド言語は何ですか?
- 2. .Netライブラリは.Net言語で使用されていますか?
- 3. C++で正しい場合はプログラムを実行してください。そうでない場合は、もう一度入力してください。
- 4. ブーストio_serviceの場合、epoll_waitで唯一のスレッドがブロックされていますか?
- 5. 最も純粋なオブジェクト指向言語のいくつかは何ですか?
- 6. オープンソースで最も広く使われているXMLエディタは何ですか?
- 7. 、そうでない場合は、一部
- 8. 有料のウェブホスティングサービスで最も広く使用されているバージョンはどれですか?
- 9. JavaScriptが使用されていない場合、パラメータを宣言するにはパフォーマンスが低下します
- 10. このコードはPl/Sqlで書かれていますか?そうでない場合は、どの言語ですか?
- 11. 私はそれを使用しない場合でも、Firebaseエラー
- 12. アンドロイドアプリでもっと多くの言語を使用するにはどうすればいいですか?
- 13. ANTLR4出力言語が最も速く実行されていますか?
- 14. セマンティクスを移動する最も一般的な場所はC++ 11 STLで使用されていますか?
- 15. C#での低レベルプログラミング
- 16. Flash Pixel Benderフィルタは広く使用されていますか?
- 17. ファイルが変更されていない場合は、もう一度ダウンロードしないでください。
- 18. .NETでDAOパターンが広く使用されていますか?
- 19. JVM上で実行される最も速い言語は何ですか
- 20. random_shuffleはスレッドセーフですか?そうでない場合はrand_rを使用する
- 21. どのコーディング略語が広く使用され、一般的に理解されていますか?
- 22. エラーの場合は、式をそのまま残してください/何もしないでください。
- 23. Pythonの:これが唯一のプロセスであればそうでない場合は、他のプロセスに
- 24. はx =です。 (d <)がC言語で使用できない場合
- 25. は、それが唯一のいくつかの特定のdiv
- 26. クラスベースのビューはDjangoコミュニティで広く使用されていますか?
- 27. その言語の言語用のコンパイラはどうやって書いていますか?
- 28. Jersey(REST Framework for Java)はProductionで広く使用されていますか?
- 29. asp.netまで最低レベルの言語?
- 30. &&(and)の背後にあるロジックは何ですか?私たちはそう書いたりええ、それが動作する場合、それは動作しますが、我々は唯一そう書いた場合(または)このコードで
あなたが求めている質問の一部は、難しい事実よりも多くの意見を求めています。余分な速度(人々はコンパイラが非常に優れていると言っていますが、何十年も余分なスピードを得ることはできませんが、それでもなお真実ではありません)は、余計な時間を費やす価値があります。よく知られている意見では、あなたはできるだけパフォーマンスが悪いものでなければならず、「ムーアの法則は今後10年を早めるでしょう」と正当化しています。 – harold
現在のコンパイラを打つのは本当に難しいです。また、自分自身に尋ねることもできます。プログラムを最適化するために何時間も費やす($ 100 /時間で)ようにしたいのですか?あるいは、RAMと余分なCPUに100ドルを費やしたいですか?ハードウェアは安く、良いプログラマは高価です。 –
@BoPerssonあなたは1時間に100ドルを稼ぐ?とにかく、その推論のラインは、あなた自身だけを使用しようとしているソフトウェアでのみ機能します。そうでなければ、百万人があなたの代わりにあなたの競争相手のソフトウェアを買うより多くのラム*に$ 100を費やさなければならないでしょう。 – harold