> For the complete documentation index, see [llms.txt](https://coderiding.gitbook.io/dgjj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coderiding.gitbook.io/dgjj/hu-lian-wang-gai-nian/qian-duan/ios/zen-me-zhi-dao-yi-ge-nsobject-dui-xiang-zhan-yong-duo-shao-nei-cun.md).

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

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

答案：&#x20;

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

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

3.对象实际利用的内存大小，就是对象的实例变量占用的内存大小，可以通过调用runtime中的class\_getInstanceSize函数得到&#x20;

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

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
```
