Eines der ersten Dinge die man lernt wenn man mit .NET beginnt ist, dass Wertetypen im Stack und Referenztypen im Heap abgelegt werden. Als nächstes fängt man dann an sich darüber zu wundern, warum String ein Referenztyp ist, sich aber bei der Programmierung wie ein Wertetyp verhält. An dieser Stelle merkt man dann schon, dass die Dinge nicht so einfach sind wie sie dank der Abstraktion des Frameworks scheinen. Spätestens wenn man sich Gedanken darüber macht welchen Datentyp null besitzt ist man nur noch von Fragezeichen umgeben.

Eric Lippert sah sich deshalb gezwungen in einem Blogpost einige Missverständnisse in Bezug auf Referenztypen und Wertetypen klar zu stellen. Seiner Meinung nach sollte die allgemeine Aussage eher so lauten:

„in the Microsoft implementation of C# on the desktop CLR, value types are stored on the stack when the value is a local variable or temporary that is not a closed-over local variable of a lambda or anonymous method, and the method body is not an iterator block, and the jitter chooses to not enregister the value.“

Ich glaube diesen Satz muss man auch als Muttersprachler mehrfach lesen. Er weist schon deutlich darauf hin, dass die Verwendung von Heap oder Stack einzig von der Integration der CLI abhängt. Denn laut Lippert:

the choice of allocation mechanism has to do only with the known required lifetime of the storage

Der Artikel ist wirklich interessant und gut zu lesen, weshalb ich ihn jedem nur empfehlen kann. Weiterhin sind auch die dazu verfassten Kommentare von Interesse. So schreibt Eric Lemes etwas in dem sich wohl Viele wieder finden werden:

„I really never cared about this until this situation, just because I choosed for a managed language and I can live with the idea that CLR is there to choose a better way to JIT my code. When I saw your post about „stack/heap storage is an implementation detail“, it sounded like music for me. It’s nice to know implementation details and how you can use them to get more performance, but I really don’t think you need to close your mind to one idea.“

In meinen Augen hilft die landläufige Aussage dabei Einsteiger nicht zu überfordern. Es ist ein wenig wie die Geschichte vom Storch: Ein Level der Abstraktion, das dabei hilft junge Köpfe nicht mit schmutzigen Details zu schockieren…