David Chappell in his article “Understanding .NET's Common Type System“ explains “A basic difference between value types and reference types is that an instance of a value type has its value allocated on the stack, while an instance of a reference type has only a reference to its actual value allocated on the stack. The value itself is allocated on the heap“
http://www.awprofessional.com/articles/article.asp?p=24456&redir=1
This is the best comment I've ever read. I'd like to keep it here for myself.