I have a very dead basic doubt about value types and reference types. The root object in .NET is System.Object and all others are derived from System.Object which is a reference type. Now all value types are derived again from System.Object. Value types are allocated in the stack wherein reference types are allocated on heap. Despite being derived from System.Object, how is value types a value type and allocated on the stack??

The question might sound very silly, but still the thought was nagging me constantly.
Thanks in advance for your answer.