Ответ
Минимальный размер экземпляра класса в куче (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 байт + сумма размеров всех хранимых свойств + выравнивание.