2011-01-18 11 views
6

Mogę sobie wyobrazić, że to pytanie było zadawane tysiące razy, ale nie miałem szczęścia w znalezieniu odpowiedzi, a to jest bardziej z ciekawości niż potrzeby.Również typy wartości w obiekcie przechowywanym w stercie?

Kopanie w nakrętki i śruby C#, zastanawiałem się, ponieważ obiekty są przechowywane w stercie, czy są to typy wartości w obiektach przechowywanych w stercie, czy też są umieszczone w stosie?

Odpowiedz

6

Są one przechowywane w stercie, wewnątrz pamięci przydzielonej dla typu referencyjnego. Ponadto value types are often stored in places other than "the stack". Jednak specyfikacja CLI nie określa, gdzie znajduje się pula pamięci przechowująca typy wartości - jest to szczegół implementacji, który nie powinien mieć znaczenia.

+0

Świetny artykuł, dziękuję! – BoredOfBinary

3

Są one przechowywane na stercie, a same obiekty. Dobrym sposobem na przemyślenie tego jest to, że gdy obiekt (który ma typy wartości jako część swojego stanu) jest przydzielany na stercie, muszą tam również istnieć typy wartości, w przeciwnym razie te typy wartości znikną, gdy tylko stos zostanie rozwinięty dla kodu, który utworzył obiekt.

1

Tak, są one przechowywane jako część sterty. Jednak to wszystko jest szczegółem wdrożenia, jak wielokrotnie opisywał Eric Lippert. Proponuję przeczytać jego posty na blogu na ten temat, this jest najnowszym, i thesetwo również ważne.

+0

Świetne artykuły, dziękuję! BTW Uwielbiam swoją książkę, tak się ją teraz czyta! – BoredOfBinary

9

Andrew Hare ma rację. Dla pełnych szczegółów, patrz Eric Lippert's blog entry:

mi przeszkadzał mitu, że „typy wartości iść na stosie” ... To jest zwykle błędnie stwierdził: oświadczenie powinno być „typy wartości mogą być przechowywane na stos "zamiast zwykłych" typów wartości jest zawsze przechowywany na stosie ".

+1

+1 za cytowanie "Niepokoi mnie mit ..." – Gabe

Powiązane problemy