Базовый CS с нуля
Данные в памяти: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Ни один не просит пересказать определение — каждый просит рассуждать о том, как данные реально лежат в памяти и почему раскладка ведёт себя именно так.
Убедись, что связываешь четыре идеи юнита: ячейки одного размера, лежащие contiguous; формулу «индекс → адрес»; объекты с именованными полями; и reference, которые позволяют фиксированной сетке хранить вещи переменного размера.
Array из 8 чисел занимает один contiguous-блок в 32 байта. Какое утверждение о его раскладке верно?
Доступ к arr[3000] занимает столько же времени, сколько к arr[3]. Почему доступ к array — константное время?
Почему первый элемент array имеет index 0, а не index 1?
Array достаёт значение через arr[2]; объект достаёт значение через user.age. В чём ключевое различие и что из него следует?
У тебя array из 100 объектов user, каждый разного размера. Как он лежит в памяти, сохраняя contiguous-сетку array из равных ячеек?
Чтение users[1].name в array объектов занимает два прыжка (hop). Какие они и почему два?
Сквозная линия юнита — одна слоистая картина. Array — это contiguous-ряд из равных ячеек, поэтому адрес любого элемента — одно умножение и одно сложение (base + i x element_size): константное время, а index 0 навязан нулевым offset. Объект группирует значения по имени, а не по позиции, поэтому порядок полей не несёт смысла. А так как ячейка фиксированного размера не вмещает объект переменного размера, ячейки хранят reference — адреса одного размера — позволяя единообразной сетке указывать на данные переменной формы. Доведённые до конца, вложенные данные — это graph of cells: одни хранят значения, другие хранят адреса, связанные вместе.