一个NSObject 占用多少内存

  1. 系统分配给了16个字节给NSOject 对象, (通过malloc_size获得)
    2.但是NSObject 对象内部使用8个字节的空间 (64位环境下, 可以通过class_getInstanceSize函数获得)

获取苹果源码地址
内存对齐以及内存对齐的规则

一个NSObject 占用多少内存_第1张图片
image.png

一个NSObject 占用多少内存_第2张图片
image.png

clang -rewrite-objc main.m -o main.cpp 将OC 改成C++文件 , 不是很建议使用这行代码, 因为不同的平台, 是 不一样的
尤其是汇编语言, 依托于硬件, 所有我们可以 指定平台
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的 cpp文件
xcrun : Xcode Run

struct NSObject_IMPL {
Class isa;
};

一个NSObject 占用多少内存_第3张图片
image.png
一个NSObject 占用多少内存_第4张图片
image.png
image.png
#import 
#import 
#import 
//@interface Student : NSObject{
//    int _age;
//    double _height;
//    NSString *_name;
//
//}
//
//
//
//
//@end
//
//@implementation Student
//
//
//
//@end

//C++
//struct NSObject_IMPL {
//    Class isa; //8个字节
//};
//
//
main(int argc, const char * argv[]) {
@autoreleasepool {
    // insert code here...
    NSObject *obj = [[NSObject alloc] init];
    //16 个字节  , 真正利用起来的只有8个字节
    /**
     struct Student{
        int age;
        double height;
     }
     */
    //8 个字节 获取类的实例对象的大小 , 并不是真正分配的内存大小, 返回的是类的实例对象的成员变量所占的内存大小
    NSLog(@"%ld",class_getInstanceSize([NSObject class]));
    
    //16个字节, 返回指针所指向那边内存的大小  获得obj所指向的内存的大小
    NSLog(@"%ld", malloc_size((__bridge const void *)(obj)));
    
}
return 0;

``}

    // CF requires all objects be at least 16 bytes.    Foundation 框架下的源码
      if (size < 16) size = 16;
一个NSObject 占用多少内存_第5张图片
image.png
一个NSObject 占用多少内存_第6张图片
image.png
一个NSObject 占用多少内存_第7张图片
image.png
一个NSObject 占用多少内存_第8张图片
image.png

一个NSObject 占用多少内存_第9张图片
image.png
一个NSObject 占用多少内存_第10张图片
memory write(直接修改内存地址).png

一个Student对象, 占用多少内存??


一个NSObject 占用多少内存_第11张图片
image.png
一个NSObject 占用多少内存_第12张图片
image.png
一个NSObject 占用多少内存_第13张图片
image.png
一个NSObject 占用多少内存_第14张图片
image.png

iOS是小端模式, 高地址在后面


一个NSObject 占用多少内存_第15张图片
image.png
一个NSObject 占用多少内存_第16张图片
image.png
一个NSObject 占用多少内存_第17张图片
image.png

一个NSObject 占用多少内存_第18张图片
image.png
一个NSObject 占用多少内存_第19张图片
image.png

方法不放在实例对象里面. 因为alloc init 会创建不同的实例对象, 而方法是不变的, 方法存一份就好了

你可能感兴趣的:(一个NSObject 占用多少内存)