1

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

4

2 回答 2

3

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

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

于 2013-10-07T19:36:04.117 回答
0

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

于 2013-10-07T12:34:30.373 回答