Nehmen wir an, ich würde ein Programm mit Windows API programmieren und dann kompilieren. Der Code wird kompiliert, um Maschinencode für die CPU auszuführen. Nun, meine Frage ist: Wenn ich die ausführbare Datei für jemand anderen mit einem anderen Befehlssatz in ihrer CPU teile. Wie kann ihre CPU den Code auf die gleiche Weise ausführen und keine Fehler oder einen anderen Code ausführen?Wie kann ein Programm auf meiner CPU auf einer anderen CPU genauso laufen?
Antwort
jemand anderes mit einem anderen Befehlssatz in ihrer CPU ... Wie kann ihre CPU den Code auf die gleiche Weise
Der Code wird nicht ausgeführt laufen. Die CPUs sprechen einfach eine andere Sprache.
Sie haben zwei Möglichkeiten
Code für die Ziel-CPU neu kompilieren (vorausgesetzt, Sie die gleiche Ausgangssprache und keine plattformspezifischen API verwenden können, so dass Sie mit C/C++ mit stdlib sind links)
ein Skript/Bytecode schreiben und eine Laufzeit zur Verfügung zu verwenden für beide Plattformen das Script (oder Bytecode)
das ist zu interpretieren, warum es Runtime sind in Installationen wie JVM (für Java) und Skripte (Python, Scala, Lua, JavaScript usw.), wobei der Code in Form eines Skripts oder als plattformunabhängiger Code vorliegt.
Und jetzt - nächster Schritt. Wenn Sie die Windows-API verwenden, wird - wie der Name schon sagt - die API (Dienste) vom Windows-System bereitgestellt. Selbst wenn dieselbe CPU ohne das Windows-System (z. B. auf einem Linux-System) verwendet wird, wird die Anwendung nicht ausgeführt. (In Ordnung, es gibt oft eine Möglichkeit, Windows API unter Linux verfügbar zu machen, aber manchmal kann es schwierig sein).
Fazit: Binaries sind nicht tragbar zwischen Befehlssätzen, wenn Sie einen hohen Level-API verwenden (Win32, ...), bist du ziemlich süchtig auf das Betriebssystem zu
Wenn auf hohe Niveau Sprachen werden in ausführbare Dateien kompiliert, oft werden sie zu Zwischencode kompiliert. Dies ist eine Darstellung des Quellcodes, der näher an der Assemblersprache kompiliert wurde, jedoch nicht für einen bestimmten CPU-Befehlssatz. Es ist Aufgabe des ausführenden Computers, diesen Zwischencode zu interpretieren und ihn im nativen Befehlssatz der CPU auszuführen.
- 1. Hat ein Single-Threaded-Anwendung laufen auf nur einer CPU
- 2. Hohe CPU auf w3wp
- 3. GPU liest von CPU oder CPU schreibt auf die GPU?
- 4. Wie CPU-Zeit vs CPU Prozentsatz
- 5. Theano fällt zurück auf CPU
- 6. Kann ein C# -Programm irgendwie seine eigene CPU-Auslastung messen?
- 7. -Monitor CPU-Auslastung auf verschiedenen Maschinen
- 8. Node.js child_process.fork(), um auf verschiedenen CPU-Kernen zu laufen
- 9. Laufen auf der spezifischen CPU, nicht eine Goroutine?
- 10. SWF extrem intensiv auf CPU
- 11. CPU-Nutzung oder CPU-Zyklen eines Prozesses/pid in Bezug auf die maximale CPU-Frequenz
- 12. CPU-Auslastung und CPU-Geschwindigkeit
- 13. Wie kann mein Go-Programm alle CPU-Kerne beschäftigt halten?
- 14. Warum wies der CPU-Leistungszähler weiterhin 0% CPU-Auslastung auf?
- 15. Python Multiprocessing, CPU-S und CPU-Kerne
- 16. C++ Threading CPU-Auslastungsproblem auf älteren PC
- 17. Ermitteln, warum ein GUI-Programm im Leerlauf CPU-Zyklen verbraucht
- 18. Wie kann ich mysqld mehr als 24,9% meiner CPU verwenden?
- 19. Hohe CPU-Auslastung auf sqlserver2012
- 20. Variablen auf CPU, Training/Gradienten auf GPU
- 21. nanosleep high cpu usage?
- 22. Mein Lua-Code mit meiner CPU auf 100%
- 23. Kann Threading CPU beschädigen?
- 24. Wie maximiere ich den Stromverbrauch einer CPU?
- 25. Maximale Speicherbelegung auf openCL CPU
- 26. Wie man Tensorflow auf der CPU
- 27. Ist es möglich, dass ein Singlethread-Programm gleichzeitig auf mehr als einem CPU-Kern ausgeführt wird?
- 28. AngularJS + Single-Core-CPU = Fast 100% CPU
- 29. mpirun mit slurm: wie man mehrere Prozesse auf einer einzigen CPU laufen lässt
- 30. Reduziert AWS CPU-Auslastung?