Это сильная деталь реализации процессора, CLR и джиттер уже выполняют большую работу, чтобы гарантировать, что ваши типы данных оптимальны, чтобы получить лучший перформанс из программы. Например, никогда не бывает, когда структура когда-либо занимает 34 бита, выбор дизайна CLR уже гарантирует, что вы начнете работать с использованием типов, которые хорошо работают на современных процессорах.
Структуры выложены оптимальными и включают в себя выравнивание варианты, которые зависят от типа данных. Например, значение int будет выровнено со смещением, кратным 4. Это дает процессору простое время для считывания int, ему не нужно мультиплексировать смещенные байты обратно в int и избегать сценарий, в котором значение привязывает кэш-строку cpu, и его необходимо склеить из нескольких считываний шины памяти. Некоторые события процессоров обрабатывают несогласованные чтения и записи как фатальные ошибки, одна из причин, по которым у вас нет Itanium на вашем компьютере.
Итак, если у вас есть структура с байтом и int, то вы получите тип данных, который занимает 8 байтов, который не использует 3 байта, между байтом и int. Эти неиспользуемые байты называются padding. В конце структуры также может быть отступы, чтобы гарантировать, что выравнивание по-прежнему оптимально, когда вы помещаете их в массив.
Объявление одной переменной как байта в порядке, процессоры Intel/AMD занимают одинаковое количество времени для чтения/записи в виде 32-битного int. Но использование short не подходит, для этого требуется дополнительный байт в инструкции процессора (префикс переопределения размера) и может стоить дополнительный цикл процессора. На практике вы не часто сохраняете память из-за правила выравнивания. Использование байта покупает только что-нибудь, если его можно комбинировать с другим байтом. Массив байтов в порядке, структура с несколькими байтовыми элементами отлично. Ваш пример - нет, он работает так же хорошо, когда вы его объявляете int.
Использование типов, меньших, чем int, может быть неудобным в коде C#, модель кода MSIL основана на int. Основные операторы, такие как + и -, определены только для int и больше, для меньших типов нет оператора. Таким образом, вам нужно использовать бросок, чтобы урезать результат до меньшего размера. Сладкое пятно int.
Вместо этого вы можете попросить об этом на http://programmers.stackexchange.com. –
для локальных переменных go с целыми целыми числами. Для массивов идут с наименьшим подходящим типом. Для полей это зависит от контекста. – CodesInChaos