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

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

Память: построй крошечный симулятор памяти

Суть Построй крошечный byte-адресуемый симулятор памяти с read, write и dereference, затем смоделируй цепочку pointer'ов и сценарий stack vs heap.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 200 min

Ты понимаешь address, value, pointer и разделение stack/heap, когда можешь построить модель, подчиняющуюся этим правилам, и увидеть, что она ведёт себя ровно так, как предсказывали уроки. Построй небольшой симулятор памяти от модели ряда ячеек, затем прогони через него цепочку pointer’ов и сценарий stack vs heap.

Цель

Преврати ментальную модель юнита в работающий код: фиксированный ряд пронумерованных byte-ячеек, из которых можно читать и в которые можно писать по address, операцию dereference, идущую за сохранённым address, и демонстрацию, отличающую value от address и время жизни stack от времени жизни heap.

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

Построй крошечный симулятор памяти — фиксированный массив пронумерованных ячеек с read, write и dereference — на любом языке, затем используй его, чтобы смоделировать цепочку pointer'ов и сценарий времени жизни stack vs heap, доказывая каждое поведение распечатанным состоянием до/после.

Требования
Критерии приёмки
  • read, write и dereference ведут себя ровно по спецификации, а address вне диапазона отклоняются, а не молча оборачиваются или роняют программу.
  • Демонстрация перезаписи показывает изменение целевой ячейки и неизменность всех остальных, распечатанные до и после.
  • Демонстрация цепочки pointer'ов доходит до данных за два чтения, а перенаправление ячейки A меняет результат dereference, не трогая ячейку B.
  • Демонстрация stack vs heap показывает, что данные на heap переживают освобождение stack-фрейма, а освобождённые stack-ячейки помечены свободными.
  • Короткое описание называет идею юнита, которую доказывает каждый сценарий.
Senior-стретч
  • Добавь многобайтовые значения: храни 32-битное целое в четырёх последовательных ячейках и добавь read32/write32, собирающие и разбивающие четыре byte, чтобы увидеть, почему одно value растягивается на четыре address.
  • Добавь простой аллокатор для региона heap: allocate(size), находящий свободные ячейки и возвращающий их стартовый address, и free(address), освобождающий их. Покажи фрагментацию, появляющуюся после нескольких циклов allocate/free.
  • Добавь защиту от stack overflow: если смоделированные фреймы вырастают за зарезервированный размер региона stack, поднимай ошибку stack overflow вместо порчи региона heap.
  • Визуализируй память как печатную сетку, цветом кодирующую свободные, stack- и heap-ячейки, и анимируй её по сценарию вызова шаг за шагом.
Итог

Построение симулятора делает модель конкретной: address — это просто индекс массива, value — просто целое, лежащее там, а dereference — два чтения, ровно как описывали уроки. Резервирование нижнего диапазона под heap и верхнего под stack и наблюдение, как данные на heap переживают освобождённый фрейм, превращает различие stack vs heap из прочитанного факта в поведение, которое ты сам произвёл. Как только правила работают в коде, весь юнит перестаёт быть абстрактным.

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

Trademarks belong to their respective owners. Editorial reference only.