1、一个NSObject对象占用多少内存
首先通过
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的CPP文件
如:
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
将OC代码编译成C++代码,发现对象在内存中是以结结构体存在的
struct NSObject_IMPL {
Class isa;// 8个字节
};
然后通过代码获取的内存大小为
方法1
// 获取某个类创建实例对象的大小
NSLog(@"%zd",class_getInstanceSize([NSObject class]));// 8
方法2
// 获得obj所指向内存的大小
NSLog(@"%zd",malloc_size((__bridge const void *)objc)); // 16
通过源码查看(https://opensource.apple.com/tarballs/objc4)
查找allocWithZone
最后查到下面的代码
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个字节给NSObject对象,但是NSObject只使用了8个字节的空间
网友评论