一個(gè)NSObject 占用多少內(nèi)存

  1. 系統(tǒng)分配給了16個(gè)字節(jié)給NSOject 對(duì)象, (通過(guò)malloc_size獲得)
    2.但是NSObject 對(duì)象內(nèi)部使用8個(gè)字節(jié)的空間 (64位環(huán)境下, 可以通過(guò)class_getInstanceSize函數(shù)獲得)

獲取蘋(píng)果源碼地址
內(nèi)存對(duì)齊以及內(nèi)存對(duì)齊的規(guī)則

image.png

image.png

clang -rewrite-objc main.m -o main.cpp 將OC 改成C++文件 , 不是很建議使用這行代碼, 因?yàn)椴煌钠脚_(tái), 是 不一樣的
尤其是匯編語(yǔ)言, 依托于硬件, 所有我們可以 指定平臺(tái)
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 輸出的 cpp文件
xcrun : Xcode Run

struct NSObject_IMPL {
Class isa;
};

image.png
image.png
image.png
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <malloc/malloc.h>
//@interface Student : NSObject{
//    int _age;
//    double _height;
//    NSString *_name;
//
//}
//
//
//
//
//@end
//
//@implementation Student
//
//
//
//@end

//C++
//struct NSObject_IMPL {
//    Class isa; //8個(gè)字節(jié)
//};
//
//
main(int argc, const char * argv[]) {
@autoreleasepool {
    // insert code here...
    NSObject *obj = [[NSObject alloc] init];
    //16 個(gè)字節(jié)  , 真正利用起來(lái)的只有8個(gè)字節(jié)
    /**
     struct Student{
        int age;
        double height;
     }
     */
    //8 個(gè)字節(jié) 獲取類(lèi)的實(shí)例對(duì)象的大小 , 并不是真正分配的內(nèi)存大小, 返回的是類(lèi)的實(shí)例對(duì)象的成員變量所占的內(nèi)存大小
    NSLog(@"%ld",class_getInstanceSize([NSObject class]));
    
    //16個(gè)字節(jié), 返回指針?biāo)赶蚰沁厓?nèi)存的大小  獲得obj所指向的內(nèi)存的大小
    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;
image.png
image.png
image.png
image.png

image.png
memory write(直接修改內(nèi)存地址).png

一個(gè)Student對(duì)象, 占用多少內(nèi)存??


image.png
image.png
image.png
image.png

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


image.png
image.png
image.png

image.png
image.png

方法不放在實(shí)例對(duì)象里面. 因?yàn)閍lloc init 會(huì)創(chuàng)建不同的實(shí)例對(duì)象, 而方法是不變的, 方法存一份就好了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容