Размер объекта (target-c) найти нелегко, поскольку его даже нелегко определить. Что вы имели в виду под "размером объекта объектива-с"?
Размер ссылки - это размер указателя (который возвращается sizeof (obj_ref)).
Размер памяти, который был выделен при создании (+ alloc), может быть найден по тому, что Джейсон дал в первом ответе. Но это зависит от времени выполнения. Время выполнения GNU отличается от времени выполнения Apple. В конечном счете это только память, которая необходима для примитивных типов данных, из которых состоит экземпляр. Но не память, которая может быть выделена позже (то есть во время инициализации (-init)) для объектов, на которые ссылаются ivars или строки.
Экземпляр класса
@interface FirstClass
{
int _someInt;
char _someChar;
}
…
@end
требуется не менее 5 байт (во многих системах размер int
может варьироваться) плюс статические издержки, если это требуется среде выполнения. Размер такого объекта очевиден.
Но для экземпляра класса
@interface SecondClass
{
FirstClass *_someObject;
char *_name;
id _data;
}
…
@end
Определение «размера» очень сложно. Объекту требуется 12 байтов (в 32-битных системах) плюс накладные расходы на выделение. Но, возможно, имя является частью объекта и выделяется / освобождается им. Должна ли память, которой нужно фактическое имя, быть частью размера объекта? А как насчет объектов, на которые есть ссылки?