与malloc_size和sizeof有什么不同

时间:2013-10-07 12:25:55

标签: objective-c size malloc sizeof

我正在使用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的实际大小?感谢。

2 个答案:

答案 0 :(得分:3)

sizeof()是一个编译时测量。请注意,示例中的sizeof(obj)告诉您指针变量的大小,而不是它指向的对象的大小。请注意,在编译时不知道Objective-C对象的大小,因此sizeof对它们不起作用。

malloc_size()是运行时测量。它告诉您使用malloc分配的块的大小。请注意,malloc经常会向上舍入,因此此大小可能会大于必要值。请注意,某些对象未分配malloc,因此malloc_size()将返回零。

答案 1 :(得分:0)

sizeof对象是该对象存储在内存中所需的空间。 malloc_size是实际为其分配了多少空间(例如,在具有固定大小池的内存分配系统中,根据正在使用的其他内存量,可能会分配不同的数量)。