Время доступа к полям Bitfield

92
20 сентября 2019, 08:30

7.25 Bitfields

Bitfields may be useful for making data more compact. Accessing a member of a bitfield is less efficient than accessing a member of a structure. The extra time may be justified in case of large arrays if it can save cache space or make files smaller.

Почему доступ к Bitfield медленнее чем к структуре?

Источник

Answer 1

Битовые поля - конструкция уровня языка. Типичный процессор не имеет команд для прямой работы с битовыми полями. Поэтому компилятору придется выполнять набор битовых операций над содержащим битовое поле словом памяти для того, чтобы прочитать или записать значение этого битового поля. Вот на это и тратится дополнительное время.

Вот, например, как выглядит простое присваивание значения битовому полю

struct S
{
  unsigned int a : 5, b : 10, c : 5;
};
...
struct S s;
s.b = rand();

Получаем

//call    rand
and     eax, 1023
sal     eax, 5
mov     edx, eax
mov     eax, DWORD PTR [rsp+12]
and     eax, -32737
or      eax, edx
mov     DWORD PTR [rsp+12], eax

Вся эта последовательность команд - это запихивание результата rand в битовое поле.

Answer 2

Да потому что каждое обращение должно еще и выделить из байта(ов) нужные биты, а при записи - соответственно их изменить и записать.

Все это требует процессорного времени - просто за вас это "пишет" компилятор...

READ ALSO
удаление объекта в C++ [дубликат]

удаление объекта в C++ [дубликат]

На данный вопрос уже ответили:

121
Прикрепить контроллер к FXML не через сам FXML

Прикрепить контроллер к FXML не через сам FXML

Собственно, есть у меня один FXML, к которому я, в зависимости от ситуации, хочу применять один из двух контроллеров, так что вариант с указанием...

107
Из-за чего появляется исключение?

Из-за чего появляется исключение?

Исключение указывает на эту строку StringuserJsonStroke=getJsonFromServer(Stringformat("%s/%d", urlPath), 0);

109
Как работает InputStream и OutputStream в Java

Как работает InputStream и OutputStream в Java

В Java потоки ввода-вывода InputStream и OutputStream представляют собой концепцию работы с внешним миром, будь то файл на диске, экран монитора, сетевое...

132