Wie genau übersetzt der Oop-Code, den ich in C++ oder C# schreibe, zum Beispiel in Maschinencode oder im Fall von C# in Bytecode? Ich meine, wie übersetzen die Objekte?Wie übersetzt objektorientierter Code in Maschinencode?
In der prozeduralen Programmierung ist es ziemlich offensichtlich, wie es nach der Kompilierung aussieht, da es wirklich eine echte Unterstützung für Funktionen in der Maschinensprache gibt. Bei der OOP-Programmierung sind jedoch keine Objekte in der Maschinensprache vorhanden.
Meine Theorie ist, dass es kompiliert das Objekt selbst zu einer Art C wie Struktur, die nur Daten enthält (keine Member-Funktionen) und wenn eine Memberfunktion aufgerufen wird, akzeptiert einen zusätzlichen Parameter, der die Datenstruktur des Objekts ist selbst. Habe ich recht?
Und was ist mit dem C++ Fall? Beide sollten am Ende in derselben Struktur oder demselben Speicherlayout aussehen? Es kann mehr als eine Möglichkeit geben, dies zu tun? Weil Sie zum Beispiel diese Struktur auch mit den Funktionen haben können, aber ich denke, es ist unwahrscheinlich, weil es mehr Speicher kostet, wenn Objekte die gleichen Funktionen übernehmen. – UnTraDe
Schreiben Sie ein "Hallo Welt" C-Programm. Kompiliere es mit gcc -o hw hw.c. Problem objdump -d hw. Es ist die gleiche Geschichte, was sich ändert, sind nur die Werkzeugnamen und die spezifischen Anweisungen. IOW die Ziel-CPU ist anders: Es ist virtuell in .net, real in C++. –