2009-08-19 23 views

Odpowiedz

27

Metody są przechowywane gdzieś w pamięci. Zauważ, że metody są dla klasy, a nie dla każdej instancji. Zwykle liczba metod nie zmienia się w czasie działania programu (są wyjątki). W tradycyjnych modelach miejsce, w którym żyją metody, nazywa się "segmentem kodu". W sieci .net jest to trudniejsze: metody początkowo znajdują się w złożeniu i są mapowane do pamięci procesu. Tam kompilator just-in-time tworzy drugą kopię niektórych metod w natywnym kodzie; ta kopia zostanie wykonana. Kod JIT może zostać utworzony i usunięty kilka razy w czasie wykonywania, więc praktyczne jest postrzeganie go również jako żyjącego "w stadzie".

+0

+1 Uwielbiam wyjaśnienia ... –

+0

Nie powiedziałem "przed klasy", ale "** za ** - klasa". Metody są na klasę: oznacza to, że każda metoda istnieje tylko raz dla klasy. Różne instancje wciąż mają te same metody. Atrybuty/właściwości są na wystąpienie: atrybut istnieje dla każdej instancji, tj. Różne instancje mają różne wartości dla atrybutu. –

+0

@Martin: Mam jedną obawę dotyczącą tego. Nie rozumiem, dlaczego kod JIT tworzył kopię za każdym razem, gdy wykonywana była ta metoda. Powiedziałeś już, że metody są w klasie i ja w 100% się z tym zgodziłem, ale wierzę również, że kiedykolwiek metoda jest nazywana, to odnosi się do tej samej rzeczywistej metody bez kopiowania, ponieważ jeśli istnieje jakiś rodzaj kopii (to co powiedziałeś), a następnie w jaki sposób można zastosować metodę na klasę. – Singleton

2

Metody klas są przechowywane razem z całym kodem w dedykowanym segmencie pamięci przeznaczonym specjalnie do przechowywania kodu. Kod każdej metody jest zapisywany jeden raz.

Powiązane problemy