1. Массив из 8 байт: byte[] b = new byte[8];
2. Структура из 8 байтовых полей: struct s { byte b0; byte b1; ... }
К каким элементам будет быстрее доступ? Или без разницы?
Наверное, это неплохой вопрос для собеседования, но я не сумел обосновать свой ответ до того как не написал юнит-тест, измеряющий скорость доступа, не удивился результату и не задумался о причинах. То есть устный экзамен провалил бы.
Будучи уязвлен собой, сегодня прошелся по коллегам, задавая им этот вопрос. Никто из них не смог обосновать ответ. Значит по крайней мере не я один.
Тест показал, что доступ к элементам массива байтов на 30-40% медленней, чем к полям структуры. Ключевые слова обоснования: boundary check, managed environment. То есть каждый раз, когда мы пишем:
byte b = bytes[i];
в .NET это равносильно такому:
if (i < 0 || i >= bytes.Lenght)
throw new IndexOutOfRangeException("Array index is out of range");
else
// код для возврата элемента массива без проверки границ
в то время как со структурой никаких проверок границ не требуется.
На C/C++ никакой разницы в быстродействии не было бы.
UPDATE: