malloc_size和大小有什么不同



我正在使用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是实际为其分配的空间量(例如,在具有固定大小池的内存分配系统中,可能会根据正在使用的其他内存量为您分配不同的空间量)。

相关内容

  • 没有找到相关文章

最新更新