本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
查看一个NSObject占用至少多少字节的方法
-
查看源码,进入NSObject的头文件,有一个isa指针(指针大小为8个字节)
-
将oc源码编译成c++的cpp文件,cd到工程(8个字节)
-
编译
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk main.m
-
打开cpp文件
[
-
-
sizeOf运算符获取空间的大小:(8个字节)
sizeOf([NSObject class])
该运算符为编译时,就可以获取大小,类似于宏定义
下列class_getInstanceSize函数,则要在运行时获取
-
runtime函数获取实例空间大小:
创建一个实例对象,至少需要多少内存? (8个字节) #import class_getInstanceSize([NSObject class]);
-
malloc获取内存空间的大小
创建一个实例对象,实际上分配了多少内存?(16个字节)
#import malloc_size(( *_bridge const void )obj);(注意使用桥接命令 _bridge)
-
利用xcode工具来查看(16个字节)
断点后,Debug -> Debug Workfllow -> View Memory (或者快捷键Shift + Command + M)
或者,在调试窗口输入命令:memory read/数量格式字节数 内存地址
-
查看苹果开源的源码(16个字节)
进入开源网址:opensource.apple.com,挑选数字最大,即是最新的版本
alloc调用的底层if(size < 16) size = 16;
结论:
系统分配了16个字节给NSObject对象(通过malloc_size函数获得) 但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_getInstanceSize函数获得)