My understanding has always been, regardless of C++ or C# or Java, that when we use the new keyword to create an object it allocates memory on the heap. I thou
new
Regarding c#, read The Truth About Value Types. You will see that value types can go on the heap as well.
And at this question is suggested that reference types could go on the stack. (but it does not happen at the moment)