Why can\'t I use sizeof() on simple structs?
eg:
private struct FloatShortPair
{
public float myFloat;
public short myShort;
};
int size = s
The sizes of short and float are constant - but how the CLR decided to pack that float in memory isn't necessarily constant. For example, on a 64-bit processor it may decide to align each value on an 8-byte boundary.
From the C# 4 spec, section 18.5.8:
For certain predefined types, the
sizeofoperator yields a constant value as shown in the table below.[...]
For all other types, the result of the
sizeofoperator is implementation-defined and is classified as a value, not a constant.[...]
For alignment purposes, there may be unnamed padding at the beginning of a struct, within a struct, and at the end of a struct.
Note that you can use sizeof in this situation, within an unsafe context. Whether you should use that or Marshal.SizeOf depends on what you're trying to do.