Задать вопрос
@sddvxd

Как процессор работает с памятью?

Добрый день. Задам тут ряд вопросов:

1)Зачем нужны указатели и многоуровневые указатели
2)Что такое смещение
3)Как компьютер запоминает значения регистров, если регистры постоянно обновляют значения из-за других программ
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
1. Для косвенной адресации. Мы не просто обращаемся к 325-й ячейке, а проводим вычисление, получаем 325 и обращаемся к ячейке с этим номером. Получили бы 456 — обратились бы к 456-й.
Это даёт кучу интересных структур данных, и самая простая из них — массив.

Многоуровневый указатель — это уже дело более высокого уровня. Пока указателем я называл просто адрес в памяти. Но, извините, в памяти хранятся однобайтовые целые, двухбайтовые целые, дробные, массивы, строчки, другие указатели — в общем, на более высоком уровне появляется понятие «тип данных». И указатели бывают на целое, на дробное — и на указатель!

2. Разница между каким-то адресом и началом структуры данных. Например, у нас есть такая структура данных (для простоты без выравнивания).
a : word
b : dword
c : byte

Тогда поле c находится по смещению 2+4 = 6, и если голова структуры по адресу 124, то поле c будет по адресу 124+6=130.

Также в стандартном режиме 8086 — 16-битный процессор с 1 мегабайтом адресуемой памяти — была хитрая система адресации под названием «сегмент:смещение», и адрес вычислялся по формуле сегмент·16 + смещение. При этом было принято считать, что сегмент незыблем, а по структуре данных (которая при этом не могла превышать 64K) мы двигались, меняя смещение.

3. Т.н. «переключение контекста» — ядро ОС просто сохраняет регистры в памяти. Очень долгая задача, кстати.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BuriK666
@BuriK666
Компьютерный псих
Все ответы в этой книге www.ozon.ru/context/detail/id/20032936
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы