如何使用runtime 机制来查询个单个 对象占用内存的大小呢
我们可以使用两种方法
- 导入 <objc/runtime.h> 使用 class_getInstanceSize() 方法
- 导入 <malloc/malloc.h> 使用 malloc_size() 方法
具体代码如下
NSObject * obj = [[NSObject alloc]init];
NSLog(@"class size is %zd",class_getInstanceSize([NSObject class]));
NSLog(@"class size is with malloc %zd",malloc_size((__bridge const void *)(obj)));
有意思的是 最终获取的结果完全不一样
使用class_getInstanceSize 获得的结果发现是 8个字节
而使用malloc_size 获得的结果是16个字节
最后查询源码解惑 runtime 中 class_getInstanceSize 指的是获得对象内所有元素的个内存大小
而malloc_size 获取的是整个指针的内存大小 还是有区别的
补充一下 alloc 方法底层中 如果分配的内存必须大于16 所以NSObject 对象的内存中的大小为16个字节
网友评论