2016-04-16 7 views
3

私はアンドロイドプログラミングの新人です。私はこの質問の答えをDevunwiredの最初の答えでWhy shouldn't an Android app be written in C/C++ because you "simply prefer to program in C/C++"? と読んでいました。 "あなたのネイティブコードは、.soファイル(armv5、armv7、およびx86用に1つ)に組み込まれている必要があります。はすべて同じAPKにパッケージ化されています。この実行可能コードの複製は、アプリケーションを3倍のサイズ")アーキテクチャごとに別々のAPKを構築するアプリケーションを配布するときAndroidはデバイスアーキテクチャを抽象化していますか?

私の質問は、オペレーティングシステムは基本アーキテクチャに対して抽象概念を提供すると常に考えていました。ですから、異なる環境にc/C++プログラムを配備したいのであれば、別のオペレーティングシステム向けに書かれたコンパイラを使ってソースコードを再コンパイルする必要があります。 もし私が正しいのであれば、なぜAndroidに関してはそのケースが違うのですか?

+2

OSは、マシンの命令セットに対して抽象化を提供しません。 (まあ、とにかく、とにかく、パフォーマンスのペナルティは大変です。) –

答えて

4

ある時点で、オペレーティングシステムはコードをCPUに渡します。バイナリには、その特定のCPUに関する命令が必要です。 Javaでは、各OSとCPUが同じ仮想マシンを使用できるため、同じ考慮事項はありません。

+0

あなたはそれを言った! OSはコードをCPUに渡します!コードはCPUに直接アクセスしないため、OSはCPU上で抽象レベルを追加します。 –

+2

仮想マシンがない場合、コードはCPUに直接アクセスします。非常に直接。バイナリの1と0は、文字通りレジスタにロードされ、デコードされたものです。いくつかの命令は特権がありますが、残りがOSによって最初に処理されるわけではありません。 – wally

+0

仮想マシンがあっても1と0は常にレジスタにロードされます!違いは、仮想マシンの場合、これはJITの後でのみ起こることです! –

関連する問題