一个OC对象占用多少内存?

 

查看一个NSObject对象占用多少内存

1、引入头文件:

#import <objc/runtime.h>

#import <malloc/malloc.h>

 

2、代码如下:

复制代码
        NSObject* obj = [[NSObject alloc]init];                  // 获取实例对象至少需要分配的内存大小,实际真正占用的大小,8 字节        size_t insSize = class_getInstanceSize([NSObject class]);         NSLog(@"NSObject Size:%zd",insSize);         // 同上        insSize = class_getInstanceSize([obj class]);         NSLog(@"NSObject Size:%zd",insSize);                  // 获取实际分配内存大小,最终分配的大小,16 字节        size_t mSize = malloc_size((__bridge const void *)obj);         NSLog(@"malloc Size:%zd",mSize);                  // 通过OC的源码可以看出配置对象内存至少有 16字节
复制代码

  1>、通过 class_getInstanceSize 可以获取类对象实际占用的大小

  2>、通过 malloc_size 实际分配内存大小,最终分配的大小

 

可以通过内存查看工具来验证上面的说法:

进入Debug模式,通过 Debug -> Debug Workfllow -> View Memory (Shift + Command + M)  可以打开内存查看工具

1、进入调试模式,断点代码后,通过 po 对象,可以查看对象对应的地址

  

复制代码
(lldb) po obj <NSObject: 0x1002013d0>
复制代码

 

2、在下面Address输入框输入要查看的内存地址,回车就可查看

 

通过上面的截图可以看到被选中的那个8个字节都是00,都是空的,说明根本就没有用到,实际只用到了前面的8字节

为什么就可以这么肯定它占用了16个字节呢?因为可以看出00后面就是 03 00 00 00  了,系统内存分配都是连续一段的,中间是不会有间隙的,所以可以确定系统就是分配了 16个字节

 

3、也可以通过 x 命令来查看,命令如下:

复制代码
(lldb) x 0x1002013d00x1002013d0: f1 f0 68 7c ff ff 1d 00 00 00 00 00 00 00 00 00  ..h|
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信