我正在使用Ojb-c,我想知道对象的内存大小,但我得到了这个,
NSObject *obj = [[[NSObject alloc] init] autorelease];
NSLog(@"malloc size of myObject: %zd", malloc_size(obj));
NSLog(@"size of myObject: %zd", sizeof(obj));
malloc size of myObject: 16
size of myObject: 4
我知道 sizeof(obj) 是 4,因为 ios 32 上的指针大小是 4 字节,有什么区别?
但不仅如此,
@interface TestObj : NSObject
@property (nonatomic, retain) NSArray *arr;
@property (nonatomic, assign) int count;
@end
@implementation TestObj
@end
TestObj *obj2 = [[[TestObj alloc] init] autorelease];
NSLog(@"malloc size of obj2: %zd", malloc_size(obj2));
NSLog(@"size of obj2: %zd", sizeof(obj2));
malloc size of obj2: 16
size of obj2: 4
我怎么知道TestObj的真实大小?谢谢。
sizeof()
是一个编译时度量。请注意,示例中sizeof(obj)
告诉您指针变量的大小,而不是它指向的对象的大小。请注意,Objective-C对象的大小在编译时是未知的,因此sizeof
不适用于它们。
malloc_size()
是运行时度量。它告诉您分配了malloc
块的大小。请注意,malloc
经常向上舍入,因此此大小可能大于必要的大小。请注意,某些对象未分配malloc
因此malloc_size()
将返回零。
对象的sizeof
是该对象存储在内存中需要多少空间。malloc_size
是实际为其分配的空间量(例如,在具有固定大小池的内存分配系统中,可能会根据正在使用的其他内存量为您分配不同的空间量)。