Als ich .NET lernte, sah ich es als eine Plattform, auf der meine .NET-Programme laufen, die ihren eigenen Stack und Heap haben.
Aber jetzt, nachdem ich mehr über die Dinge gelernt habe, sehe ich eine .NET-Anwendung genauso wie jede andere native C/C++-Anwendung. Sie ist im Portable Executable (PE)-Dateiformat mit einem neuen Datenverzeichnis und die .text-Sektion ist mit MSIL-Code anstelle von Maschinencode gefüllt. Der einzige Unterschied besteht darin, dass einige DLLs (die als .NET-Plattform betrachtet werden) (wie jede andere Dll-Abhängigkeit) geladen werden.
Ich vermute, am Einstiegspunkt gibt es einige Maschinencode, der in die geladene DLL(.net-Plattform) und Funktionen dieser DLL ruft lesen die MSIL von .text Abschnitt (Segment, um korrekter zu sein) und generieren äquivalente Maschinencode und legen Sie es in eine Art von Puffer (ich weiß nicht, welcher Bereich es wäre es. Ich kann nicht .text & .data sein, da sie schreibgeschützt sind. werden sie Stack oder Heap sein?). Dann machen Sie die EIP zeigen auf diesen Puffer von Anweisungen. Die letzten paar Anweisungen wieder zurück in DLLs aufrufen, um den Prozess für den Rest der MSIL zu wiederholen.
Ab dem Managed Heap
& Managed Stack
Sie sind nur ein Teil des Prozesses Heap & Stack. seine nur, dass einige Funktionen (als GC bezeichnet) den Überblick über den Speicher Zuweisungen & Freigaben von diesen Teilen des Speichers zu halten.
Ich mag diese realistische Sichtweise. Ich weiß nicht, inwieweit ich der Wahrheit entspreche. Ich vermute diese Dinge nur. Bitte korrigieren Sie mich und sagen Sie mir mehr darüber. Inwieweit ist sie dieser Ansicht ähnlich? Wo kann ich mehr über die .NET-Plattform unter diesem Gesichtspunkt erfahren?