Каков минимальный объём памяти, занимаемый экземпляром reference type (класса) в Swift?

«Каков минимальный объём памяти, занимаемый экземпляром reference type (класса) в Swift?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Минимальный размер экземпляра класса в куче (heap) на 64-битной архитектуре составляет 16 байт. Эта память расходуется на служебную информацию:

  • 8 байт: Указатель на метаданные типа (isa pointer).
  • 8 байт: Счётчик сильных ссылок (strong reference count).

Важно: Это накладные расходы. Память для свойств экземпляра добавляется сверху. Также система может выделять память с учётом выравнивания (alignment), что может увеличить фактический размер.

Пример и измерение:

import Foundation

class EmptyClass {}
let instance = EmptyClass()

// Размер указателя на экземпляр (в стеке)
print(MemoryLayout.size(ofValue: instance)) // 8

// Примерный размер самого объекта в куче (более точный метод)
let size = malloc_size(Unmanaged.passUnretained(instance).toOpaque())
print(size) // Вернёт 16 (или больше, в зависимости от аллокатора)

Для непустых классов размер будет: 16 байт + сумма размеров всех хранимых свойств + выравнивание.