Я не могу понять заполнение структуры в C/C++.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Я не могу понять заполнение структуры в C/C++.

Сообщение Anonymous »

Я посмотрел несколько руководств на YouTube. Они сказали, что следует использовать 32-битную архитектуру, а затем сказали, что «один цикл ЦП может одновременно получить доступ только к слову (равному собственному размеру ЦП, т.е. 4 байтам) из памяти». Пока я продолжал смотреть, это перестало иметь смысл, если я не предположил, что один цикл ЦП равен одному слову, а не меньшему, что кажется неправильным.
Изучая ассемблер, я понял, что память адресуется побайтно. Я мог бы легко получить доступ к байту, слову (сейчас я говорю о слове как 16-битном / 2-байтовом), двойном слове или четверном слове, и если они не подходят, то в заполнении нет необходимости.
Предположим, 32-битная система. ЦП должен иметь возможность извлекать из памяти двойное слово (32 бита = 4 байта) за раз, поскольку оно идеально вписывается в регистр. Это также означает, что он должен иметь возможность извлекать 1 или 2 байта за раз, но не более 4 байтов одновременно из-за ограничений регистра.
Для 64-битной системы, как следует из названия, ЦП может извлекать из памяти 64 бита (8 байт) за раз. Это также означает, что он может получать 32-битные, 16-битные и 8-битные значения.
Из-за этой идеи я не могу понять заполнение структуры и не могу полностью принять утверждение «1 цикл процессора = 4 байта в 32-битном режиме».
Если вы не упаковываете в регистр что-то меньшее байта (например, 4 бита), я не понимаю, зачем нужно заполнение необходимо. Поскольку минимальный размер доступа к регистру составляет 8 бит, имеет смысл добавлять заполнение во время компиляции, когда фрагмент данных, загружаемых в память, меньше 8 бит. Это гарантирует выполнение требования без необходимости тратить процессору дополнительные циклы на добавление самого заполнения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ing-in-c-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»