2009-08-19 37 views

Antwort

27

Methoden werden an einer anderen Stelle im Speicher gespeichert. Beachten Sie, dass Methoden pro Klasse und nicht pro Instanz sind. In der Regel ändert sich die Anzahl der Methoden nicht über die Laufzeit eines Programms (es gibt Ausnahmen). In traditionellen Modellen wird der Ort, an dem die Methoden leben, als "Codesegment" bezeichnet. In .net ist es schwieriger: Die Methoden leben ursprünglich in der Assembly und werden im Prozessspeicher abgebildet. Dort erstellt der Just-in-Time-Compiler eine zweite Kopie einiger Methoden im systemeigenen Code. Diese Kopie wird ausgeführt. Der JIT-Code kann während der Laufzeit mehrmals erstellt und gelöscht werden, so dass es praktisch ist, ihn auch als "in Heap" zu betrachten.

+0

+1 Ich liebte die Erklärung ... –

+0

Ich sagte nicht "vor Klasse", aber "** pro ** - Klasse". Methoden sind pro Klasse: das bedeutet, dass jede Methode nur einmal für die Klasse existiert. Verschiedene Instanzen haben immer noch die gleichen Methoden. Attribute/Eigenschaften sind pro Instanz: ein Attribut existiert für jede Instanz, d. H. Unterschiedliche Instanzen haben unterschiedliche Werte für ein Attribut. –

+0

@Martin: Ich habe ein Anliegen diesbezüglich. Ich verstehe nicht, warum der JIT-Code bei jeder Ausführung dieser Methode eine Kopie erstellt hat. Sie haben bereits gesagt, dass Methoden Per-Class sind, und ich 100% stimme dem zu, aber ich glaube auch, dass, wann immer eine Methode aufgerufen wird, sie die gleiche tatsächliche Methode ohne Kopieren bezeichnet, denn wenn es eine Art von Copy-Thingy gibt (das was) Sie sagten) dann, wie kann Methode Per-Class sein. – Singleton

2

Klassenmethoden werden zusammen mit dem gesamten Code in einem speziellen Segment des Programmspeichers gespeichert, der speziell zum Speichern von Code gedacht ist. Der Code jeder Methode wird einmal gespeichert.

Verwandte Themen