0

Microsoft Officeなどの多くの一般的なプログラムがC、C ++、アセンブリなどの言語で記述されていても、同じインストーラーが適切なOSを搭載した任意のコンピューターで機能する可能性はありますか?インストーラーが実際にコンピューター上でソースコードをコンパイルしているからですか?AMDとIntelが基本的に同じ命令セットを共有しているからですか?

Cは移植性があると聞きましたが、JavaはCよりもどのような意味で移植性がありますか?では、仮想マシンのポイントは何ですか?

4

3 に答える 3

6
  1. CまたはC++について、本質的に移植性のないものはありません。移植性の懸念は、オペレーティングシステムまたはコンパイラ固有の関数を呼び出すときにのみ発生します。アセンブリ言語プログラミングの場合、移植性の欠如は一般に命令セットの懸念によるものです。ターゲットマシンセットを適切に制限する場合、これらの移植性の問題は問題になる場合と問題にならない場合があります。
  2. 「適切なOS」は、明確に定義された実行環境が存在するため、移植性(厳密な意味で)が問題ではないことを示唆しています。つまり、提供されるバイナリは、Windowsを実行しているIntelISAマシンでのみ実行されます。
  3. インストーラーは、ほぼ確実にコンピューターのソースコードをコンパイルしません。
  4. はい、共有命令セット(この場合はオペレーティングシステム)があるため、プログラムは両方で同等に実行されるはずです。別のアーキテクチャ(ARMなど)のコンピューター、または別のオペレーティングシステム(Linuxなど)でそのバイナリを実行しようとすると、運が悪くなります。
  5. Javaは、多数のAPIと仮想マシンを提供します。これらの仮想マシンを使用すると、コードを1回コンパイルしてから、複数のアーキテクチャーやオペレーティングシステムにデプロイできます。これらはJavaAPIを介してシステムへのインターフェースを抽象化するため、別のシステムにデプロイする場合に、そのすべてのコードを移植することを心配する必要はありません。Cは一部の標準ライブラリのみを提供しますが、特定のマシンアーキテクチャを指定しません。
  6. 仮想マシンのポイントは、まさにこの抽象化です。ホストプロセッサの命令セットでネイティブに実行されるコードにコンパイルするプログラムを作成する代わりに、仮想マシンで実行されるコードにコンパイルするプログラムを作成します。VMの実装者は、VM命令からネイティブホスト命令への必要な変換と、結果の変換を処理ます。
于 2013-01-28T21:27:08.697 に答える
0

Cの歴史とその設計方法と理由に関する本を読むと、Cは同じプログラムを異なるオペレーティングシステムとハードウェアで実行できるように設計されていることがわかります。

于 2013-01-28T21:26:29.270 に答える
0

原則として、Cは非常に移植性の高い言語です。移植性の問題の原因は実際には2つだけです。

  1. 動作が未定義であるか、実装間で実際に異なる方法で「実装定義」の領域に深く入っているが、それらが作成されたOS/コンパイラ/月の満ち欠けの組み合わせで動作する無効なプログラム。

  2. Cには非常に軽い標準ライブラリがあるため、ほとんどすべての有用なプログラムは、ユーザー、OS、および外部と通信するための追加のインターフェイス(言語標準で定義されていない)に依存します。

余談ですが、2番目の点に関しては、POSIX(基本的にCを拡張し、不足しているもののほとんどを提供する標準)を採用しているWindowsを除く、関連するすべての実世界のシステムでそれを乗り越える寸前でした。上記のポイント#2)。しかし、その後、AndroidとiOSが登場し、物事を再び断片化しました...

于 2013-01-28T21:55:18.143 に答える