iOS 之 OC 对象占用多少内存

2021-01-29 16:41:19 浏览数 (1)

来源:枫叶无处漂泊

NSObject对象占用多少内存空间

一个NSObject对象都会分配16byte的内存空间,通过源码可以知道:

代码语言:javascript复制
size_t instanceSize(size_t extraBytes) {
    size_t size = alignedInstanceSize()   extraBytes;
    // CF requires all objects be at least 16 bytes.
    if (size < 16) size = 16;
    return size;
}

通过代码可以知道,苹果内存分配最小内存字节数为16 bytes.

OC对象实际使用内存空间

根据设备的cpu是64位还是32位的

  • 64位的占用了 8 Bytes
  • 32位的使用了 4 bytes

在64位情况下,OC实例对象成员变量所占的大小,实际上是 8 字节,下面可以通过源码来验证一下:

代码语言:javascript复制
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj); 

Obj-C指针所指向的内存的大小,实际上是16 字节

代码语言:javascript复制
#import <Objc/Runtime>
Class_getInstanceSize([NSObject Class])

size_t class_getInstanceSize(Class cls) {
    if (!cls) return 0;
    return cls->alignedInstanceSize();
}

对象在分配内存空间时,会进行内存对齐,所以在iOS 中,分配内存空间都是16字节的倍数。16字节是苹果设定的内存的最小单位。

0 人点赞