当我在目标 c 中使用此语句时
NSObject object = [[NSObject alloc] init];
为对象保留多少内存?
您可以使用以下代码测试对象的大小:
#import <malloc/malloc.h>
//...
NSObject *obj = [[NSObject alloc] init];
NSLog(@"Size: %zd bytes", malloc_size((__bridge const void *)(obj)));
该测试产生:“大小:16 字节”
根据 Instruments,16 个字节。(虽然,那是NSObject *object = ...
)
这取决于几个因素,包括您使用的是 iOS 还是 OS X、您构建的操作系统版本以及您是在编译 32 位还是 64 位。它是 8 字节或 16 字节。基本上它是 16 个字节,在最近的环境中 - 有一个指向类数据结构的指针、一个引用计数和 4 个字节的杂项、特定于类的数据。
请注意,您从 malloc_size() 得到的答案将始终为 16,因为它返回分配块的大小,这可能大于 malloc 请求的实际大小。在 OS X 和 iOS 中,分配大小始终至少为 16 字节。