2016-04-16 18 views
3

Ich bin neu in Android-Programmierung, ich lese die Antworten auf diese Frage Why shouldn't an Android app be written in C/C++ because you "simply prefer to program in C/C++"? in der ersten Antwort von Devunwired. er erwähnte, dass "Ihr systemeigener Code in .so Dateien (eine für armv5, armv7 und x86) alles in die gleiche APK verpackt werden muss. Diese Duplizierung von ausführbaren Code macht Ihre App 3x die Größe (dh ein" fat binary "), es sei denn, Sie nehmen die Aufgabe separate APKs für jede Architektur zu erstellen, wenn Sie die Anwendung verteilen"Zeichnet Android die Gerätearchitektur auf?

Meine Frage ist, ich dachte immer, dass Betriebssysteme im Allgemeinen eine Abstraktion über die zugrunde liegende Architektur bieten. Wenn ich also ein c/C++ - Programm für verschiedene Umgebungen bereitstellen möchte, muss ich den Quellcode mit einem Compiler neu kompilieren, der für verschiedene Betriebssysteme geschrieben wurde. Dieses Betriebssystem kann jedoch unterschiedliche Versionen haben, die unterschiedliche Architekturen unterstützen. Wenn ich richtig bin, warum ist der Fall anders, wenn es um Android geht?

+2

Ein Betriebssystem bietet keine Abstraktion über den Befehlssatz der Maschine. (Naja, normalerweise sowieso. Die Leistung Strafe ist unerschwinglich.) –

Antwort

4

Irgendwann übergibt das Betriebssystem den Code an die CPU. Die Binärdatei muss Anweisungen für diese bestimmte CPU enthalten. Mit Java stellt jedes Betriebssystem und jede CPU die gleiche virtuelle Maschine zur Verfügung, sodass Sie nicht dieselben Überlegungen anstellen müssen.

+0

Sie sagten es! Das Betriebssystem übergibt den Code an die CPU! der Code greift nicht direkt auf die CPU zu, daher fügt das Betriebssystem eine Abstraktionsebene über die CPU hinzu! –

+2

Wenn keine virtuelle Maschine vorhanden ist, greift der Code direkt auf die CPU zu. Sehr direkt. Die 1s und 0s in der Binärdatei sind wörtlich diejenigen, die in die Register geladen, decodiert werden usw. Einige Befehle sind privilegiert, aber das bedeutet nicht, dass der Rest zuerst vom Betriebssystem behandelt wird. – wally

+0

Die 1s und 0s werden immer in das Register geladen, auch wenn es eine virtuelle Maschine gibt! Der Unterschied besteht darin, dass dies im Falle einer virtuellen Maschine nur nach JIT geschehen kann! –

Verwandte Themen