#c #memory-management #cpu #low-level
#c #управление памятью #процессор #низкоуровневый
Вопрос:
когда я проходил курс по аппаратно-программному интерфейсу, наш преподаватель сказал, что центральный процессор получает данные с помощью word machine, например, центральный процессор может получить значение по адресу 0x00, но не может получить значение по адресу 0x01, но значение по адресу 0x00 (размер слова: обычно это 4 байта), поэтому я хочу понять, как мы можем использовать short int в c, которые содержат только 2 байта?
Комментарии:
1. Процессор загружает широкую строку кэша и маскирует ненужные байты.
2. Прочитав 4 байта, но используя только 2 из них.
3. так какой смысл использовать short, если нет экономии производительности / памяти?
4. когда язык был написан, существовали 8-битные системы и определенные преимущества в производительности. Если вы используете их массив, вы сэкономите память, если будете использовать байты меньшего размера по сравнению с короткими и целыми числами. Не все процессоры используют слова / регистры одинакового размера. Ряд процессоров имеют инструкции, которые допускают меньшие типы данных, не требуя дополнительных инструкций
5. @karim «Смысл использования short» — это пробел. Два 2-байтовых
short
файла помещаются в то же пространство, что и один 4-байтовыйint
, что обеспечивает экономию памяти. Иногда стоимость снижает производительность.
Ответ №1:
Разные процессоры имеют разные ограничения доступа к памяти. Одной из распространенных форм является разрешение доступа с любым смещением в байтах, но при этом возникают потери производительности, поскольку для извлечения всех байтов, необходимых для операции, могут потребоваться две передачи с выравниванием по словам. Вторая форма просто запрещает не выровненный доступ к памяти.
В первом случае при компиляции беспокоиться не о чем, память может быть «упакована» или выровнена по словам, и оба будут работать, но один будет быстрее, а другой будет использовать меньше памяти.
Во втором случае компилятор должен сгенерировать код, чтобы поместить выровненные данные в правильное расположение регистра (регистров), чтобы разрешить выполнение арифметических и логических операций. Эти операции сдвигают и / или маскируют биты в единицах размером с байт. Например, для загрузки 2-байтовой переменной может потребоваться загрузка в 4 байта. В этом случае 2 байта данных, вероятно, потребуется «обнулить», а 2 «хороших» байта, возможно, потребуется переместить в младшие биты регистра. За все это отвечает компилятор, но это увеличивает накладные расходы на доступ к данным. С другой стороны, это означает, что данные занимают меньше памяти, когда не хранятся в регистре. Это может быть важно, если у вас большой объем данных, например, массив из нескольких миллионов целых чисел; хранение его в половине пространства может фактически ускорить выполнение программы (даже с учетом вышеуказанных накладных расходов), поскольку в кэш помещается в два раза больше значений массива.
Ответ №2:
32-разрядный процессор использует 4 байта для целого числа, поэтому сначала позвольте мне объяснить о банке памяти
хранение данных = Если бы процессор использовал однобайтовую схему адресации, для выполнения операции чтения / записи потребовалось бы 4 цикла памяти. Итак, с точки зрения процессора, объем памяти распределен, как показано.
Итак, если целое число хранится как в диапазоне адресов 0x0000-0x0003, т. Е. 4 раза, для этого требуется всего один цикл чтения / записи в память, поэтому процессор освобождается от дополнительных циклов памяти и, следовательно, повышается производительность.
Также возможно, что выделение переменной может начинаться с числа, не кратного четырем, следовательно, для этого может потребоваться 2 или более циклов памяти (float, double и т.д.) В соответствии с тем, как они хранятся. Процессор извлекает данные за минимальное количество циклов чтения.
В коротком типе данных выделяется только два байта памяти, и если он начинается с 0x0001, то заканчивается на 0x0002, для этого все еще требуется 1 цикл чтения. Но преимущество заключается в том, что в integer он выделяет 4 байта, где, поскольку short выделяет два байта, поэтому два байта сохраняются из целочисленного типа данных. Таким образом, улучшается хранение
Ссылка:
Комментарии:
1. Говорить о банках несколько излишне. Важным моментом является то, что «собственный» доступ к памяти (в этом примере) имеет ширину 32 бита.