我正在使用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的实际大小?感谢。
答案 0 :(得分:3)
sizeof()
是一个编译时测量。请注意,示例中的sizeof(obj)
告诉您指针变量的大小,而不是它指向的对象的大小。请注意,在编译时不知道Objective-C对象的大小,因此sizeof
对它们不起作用。
malloc_size()
是运行时测量。它告诉您使用malloc
分配的块的大小。请注意,malloc
经常会向上舍入,因此此大小可能会大于必要值。请注意,某些对象未分配malloc
,因此malloc_size()
将返回零。
答案 1 :(得分:0)
sizeof
对象是该对象存储在内存中所需的空间。 malloc_size
是实际为其分配了多少空间(例如,在具有固定大小池的内存分配系统中,根据正在使用的其他内存量,可能会分配不同的数量)。