Размеры short
и float
постоянны - но то, как CLR решил упаковать этот плавающий элемент в память , не обязательно обязательно постоянно.Например, на 64-битном процессоре он может решить выровнять каждое значение на 8-байтовой границе.
Из спецификации C # 4, раздел 18.5.8:
ДляВ определенных предопределенных типах оператор sizeof
возвращает постоянное значение, как показано в таблице ниже.
[...]
Для всех других типов результат оператора sizeof
определяется реализацией и классифицируется как значение, а не как константа.
[...]
В целях выравнивания может быть безымянный отступ в начале структуры, внутриstruct, и в конце struct.
Обратите внимание, что может использовать sizeof
в этой ситуации в контексте unsafe
.Нужно ли вам это использовать или Marshal.SizeOf
зависит от того, что вы пытаетесь сделать.