2

バイト コードは、アセンブリ コードとマシン コードの中間形式のコードですか? バイトコードはオブジェクトコードと同じですか?

これは私が思うことです - 高級言語 - >アセンブリ言語 - >マシンコード/オブジェクトコード(0と1。CPUごとに異なります)

こんな感じですか?高級言語 -> アセンブリ言語 -> バイトコード (仮想マシンによって処理され、マシンコードに変換されます) -> マシンコード

私はこれを読みました - SO- bytecode vs assembly language code、しかしそれをよりよく理解する必要があります

4

4 に答える 4

1

Javaプラットフォーム:高級言語→バイトコード バイトコードはJVMなどのVMで実行

.Net プラットフォーム: 高水準言語 -> CIL (共通中間言語) ---ジャスト イン タイム コンパイル (JIT) ---> ネイティブ マシン コード

ネイティブ コンパイル: 高水準言語 -> オブジェクト コード (ネイティブ マシン コード) ---リンク先 --> 実行可能ファイル (ネイティブ マシン コード) リンクは、とりわけ変数のアドレス参照を修正します。

于 2013-07-07T12:23:05.760 に答える
1

公式には、「バイトコード」のようなものは (少なくとも Java では) 存在しません。それは単に「コード」です。(Java 仮想マシン仕様のどこにも「バイトコード」はありません。)

しかし、非公式には、Java .class ファイル内の Java メソッド定義の「コード」属性に含まれる仮想マシンの「命令」に適用される用語です。また、この用語は、C++ などの他のいくつかの言語の仮想マシン命令にも適用されます (おそらく「厳密」ではなくなります)。

仮想マシン命令の概念は、一般に、 UCSD Pascalの「p コード」と関連する初期の Pascal 言語の実装に端を発していると考えられています。基本的に、これらは「仮想マシン」によって直接解釈できるコンパイラ「中間言語」の形式であり、ネイティブ マシン コードに変換するには追加のコンパイル手順が必要です。通常、仮想マシンの命令セットは (可能な限り) 「マシンに依存しない」ように設計されており、特定のオペレーティング システムやハードウェアの命令セットに固有のものではありません。

バイトコード命令は、一般に「スタック アーキテクチャ」での単純なアクションです。スタック アーキテクチャは、コンパイルが容易で、"命令" を非常に単純にすることができ、解釈が容易であり、通常のコンパイラ シナリオでの後続の最適化およびコード生成ステップの便利な "ソース" であるため、便利です。(注目すべき例外は Android Dalvik仮想マシンで、命令セットはスタック アーキテクチャではなく、レジスタ ベースのアーキテクチャです。)

Java では、Java プログラムが最初に「解釈」され、バイトコードが JVM のインタープリターによって「実行」されることが最も一般的です。次に、個々のメソッドが「ホット」(頻繁に使用されている) と判断された場合、個々のメソッドは「ジャストインタイム コンパイラ」(JITC) を使用して「ターゲット」ハードウェアの命令セットにコンパイルされます。他の言語の実装は、完全に解釈されたままになるか、すぐに機械命令に変換される場合があります。

于 2013-07-07T13:30:47.677 に答える
-1

はい、Bytecodeプレマシン コードです。これは仮想ランタイムによって処理され、マシンコード (0/1) に変換されます。Java のbytecode場合は .NET の場合はIL/CIL.

ここから撮影

p-code (移植可能なコード) とも呼ばれるバイトコードは、ソフトウェア インタープリターによる効率的な実行のために設計された命令セットの形式です。人間が読めるソース コードとは異なり、バイトコードはコンパクトな数値コード、定数、および参照 (通常は数値アドレス) であり、プログラム オブジェクトの型、スコープ、入れ子の深さなどの解析と意味分析の結果をエンコードします。したがって、ソース コードを直接解釈するよりもはるかに優れたパフォーマンスが得られます。

于 2013-07-07T12:04:03.667 に答える