awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Данные в памяти: построй модель раскладки памяти

Суть Практический проект — построить крошечную модель памяти, которая раскладывает array и объекты по ячейкам, вычисляет адреса элементов вручную и показывает, где кончаются value и начинаются reference.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 210 min

Ты можешь пересказать, что array contiguous, а объекты — именованные слоты, но картина становится твоей, только когда ты её построишь. Сделай небольшую программу, которая раскладывает данные в фейковой памяти, вычисляет адреса так, как это делает рантайм, и рисует разницу между value и reference.

Цель

Преврати ментальную модель юнита в работающий артефакт: крошечный симулятор памяти, который размещает array и объекты в адресуемых ячейках, достаёт любой элемент через base + index x element_size и показывает, как array объектов становится graph of cells, связанным reference.

Проект
0 из 7
Цель

Построить небольшую модель раскладки памяти (на любом языке), которая симулирует ряд адресуемых ячеек, раскладывает в него array и объекты и вычисляет адрес любого элемента той же арифметикой, что учил юнит — доказывая каждый доступ и вручную, и кодом.

Требования
Критерии приёмки
  • Проработанная таблица адресов для array чисел: index, offset (index x element_size), вычисленный адрес и прочитанное value — с index 0 на base address.
  • elementAt возвращает верное значение для нескольких индексов, и путь кода для большого индекса доказуемо та же фиксированная работа, что и для малого (без цикла по элементам).
  • Чтение по key возвращает верное значение поля, и два объекта с одинаковыми полями в разном порядке дают идентичные чтения.
  • Чтение users[i].field в два прыжка прослежено по шагам: адрес ячейки array, хранящийся там reference, адрес объекта и значение поля.
  • Короткое описание (один-два абзаца), объясняющее, какие ячейки хранят value, а какие reference в итоговой раскладке, и почему array объектов обязан использовать reference, чтобы сохранить сетку из равных ячеек.
Senior-стретч
  • Добавь маленький визуализатор (текст или рисунок), который рисует ряд ячеек с адресами снизу и стрелками от reference-ячеек к объектам, на которые они указывают — делая graph of cells видимым.
  • Поддержи вложенные объекты (объект, чьё поле ссылается на другой объект) и проследи много-прыжковое чтение вроде company.address.city, считая прыжки.
  • Добавь намеренно сломанную раскладку, где один элемент неверного размера, и покажи, как base + index x element_size тогда попадает на неверный адрес — демонстрируя, зачем нужны равные ячейки.
  • Сравни две раскладки одних данных — array чисел (value внутри) против array объектов из одного числа (reference наружу) — и посчитай, сколько ячеек и прыжков стоит прочитать одно значение в каждой.
Итог

Построение модели делает юнит постоянным: память — это ряд адресуемых ячеек; array — contiguous-блок из равных ячеек, чьи элементы достаёшь через base + index x element_size за константное время, с index 0 на base; объект — именованные слоты, достаются по key, поэтому порядок полей не важен; а array объектов сохраняет сетку, храня reference одного размера и читая в два прыжка. Когда сам нарисуешь value и стрелки, любая вложенная структура читается как тот же graph of cells.

Продолжить восхождение ↑Что такое абстракция
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.