怎么知道一个NSObject对象占用多少内存?

https://www.jianshu.com/p/8829738b94b7

答案:

1.可以通过查看NSObject对象对应的C++结构体的大小来判断。

2.可以使用xcode的命令行工具来把指定的OC文件转成C++文件。

3.对象实际利用的内存大小,就是对象的实例变量占用的内存大小,可以通过调用runtime中的class_getInstanceSize函数得到

4.对象实际占用的内存大小,就是系统实际分配给对象的内存大小,OC对象是通过alloc方法得到的对象大小,我们可以通过malloc中库函数malloc_size来得到结果.

5.这个函数的代码很简单,返回的结果就是系统给一个对象分配内存的大小。当对象的实际大小小于16时,系统就返回16个字节的大小。也就是说16个字节大小是系统的最低消费。还是用坐车的例子来说明一下,假如有8个人想坐车,他们打电话叫车说要一辆能坐8个人大小的车,对方说sorry我们没有坐8个人大小的车,我们这里最小的就是坐16个人的车。最后来了一辆坐16个人的车,拉了8个人开走了。车就好比一个NSOject对象,车上的乘客就好比是对象中的成员,车的大小或者说载客数量就相当于一个对象占用的内存大小,车上实际的乘客数量就是对象中成员的大小。所以说一个NSObject对象占用多少内存,我想应该很明白了。

#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <malloc/malloc.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject *objc = [[NSObject alloc] init];
        
        NSLog(@"objc对象实际需要的内存大小: %zd", class_getInstanceSize([objc class]));
        NSLog(@"objc对象实际分配的内存大小: %zd", malloc_size((__bridge const void *)(objc)));
    }
    return 0;
}

//输出的结果
2018-08-02 23:31:39.891056+0800 OC对象的本质[8461:5063635] objc对象实际利用的内存大小: 8
2018-08-02 23:31:39.891320+0800 OC对象的本质[8461:5063635] objc对象实际占用的内存大小: 16

Last updated