There is a fixed overhead associated with a .NET object as more fully outlined in this SO question: What is the memory overhead of a .NET Object being 12 or 24 bytes depending o
Zero.
Unless there's gaps due to alignment, in which case it's the cost of those gaps.
But otherwise the structure is just the same as if the fields were separate variables laid out on the stack.
Box it though, and you're dealing with it via object
which has the same overheads as any other reference type.