2015-03-25 9 views
5

Zasadniczo będzie więcej pamięci wykorzystywane przez instancji Foo, gdy jego wartość jest nabyte tak:Czy wczytywanie klas za pomocą większej liczby metod kosztuje więcej pamięci?

public class Foo 
{ 

    internal double bar; 

    double GetBar(){ return bar; } 

} 

czy tak?

public class Foo 
{ 

    internal double bar; 

} 

public static class FooManager 
{ 
    public static double GetBar(Foo foo) { return foo.bar; } 
} 

To znaczy, czy pamięć jest używana dla każdej metody na obiekt lub na typ?

Odpowiedz

6

Same instancje mają tylko jeden wskaźnik do tabeli metod ładowanej z klasą, więc nie ma dodatkowych kosztów dodatkowych na wystąpienie większej liczby metod, tylko pól.

Drugi przykład użyje nieco więcej pamięci w sumie, ponieważ masz definicje dla dwóch klas, a więc więcej narzutów na klasy (i jak pierwotnie napisano, z FooManager jako klasa niestatyczna, potrzebujesz instancji FooManager), ale ilość pamięci użytej przez każdą instancję Foo jest taka sama.

+1

Dzięki! Byłem po prostu ciekawy: P – AlphaModder

+0

@Random Zakładam, że punkt idzie tak samo dla wszystkich języków. Atleast dla C++. – prabhakaran

+0

@prabhakaran Cóż, w C++ klasa bez metod wirtualnych nie ma nawet tego jednego wskaźnika. – Random832

Powiązane problemy