Обычный Array использует буфер элементов, обычно в куче; его элементы здесь — existential-контейнеры. Само значение массива может храниться в разных местах.
Где располагаются элементы массива
Обычный Array использует буфер элементов, обычно в куче; его элементы здесь — existential-контейнеры. Само значение массива может храниться в разных местах.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, в какой области памяти будет размещён массив, содержащий элементы, удовлетворяющие протоколу Equatable. Обратите внимание на типизацию и особенности хранения в Swift.
let array: [any Equatable] = [obj1, obj2, ...]
Ответ
Обычный Array использует буфер элементов, обычно в куче; его элементы здесь — existential-контейнеры. Само значение массива может храниться в разных местах.
any Equatable допускает элементы разных конкретных типов. Малые значения могут помещаться во внутренний буфер existential, более крупные требуют отдельного хранения; для классов хранится ссылка на объект. Место размещения переменной array зависит от её контекста и оптимизаций, поэтому ответ «всё на стеке, потому что Array — struct» неверен. Сам массив из existential-элементов также не получает автоматически удобного универсального == для любых пар разных типов.
Источник: github.com.