內存管理剖析(三)——iOS程序的內存佈局

內存管理傳送門🦋🦋🦋

內存管理剖析(一)—MRC時代的手動內存管理markdown

內存管理剖析(二)——定時器問題佈局

內存管理剖析(四)——autorelease原理分析post

內存管理剖析(五)—— weak指針實現原理測試

iOS程序安裝以後,是以Mach-o文件的格式保存在iOS設備裏面,當啓動程序時,對應的Mach-o文件就會被加載進內存。下面,就來介紹一下iOS程序的內存佈局。首先看下圖iOS程序內存佈局spa

若是你擁有iOS逆向的知識,這個話題對你來講應該如同砍瓜切菜,假如不巧你不懂逆向的話,還有一種方法能夠來驗證上面的圖。看以下測試代碼3d

//*********************main.m**********************

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int a = 10;                   //已初始化全局變量

int b;                        //未初始化全局變量

int main(int argc, char * argv[]) {
    @autoreleasepool {
        static int c = 20;    //已初始化靜態變量
        
        static int d;         //未初始化靜態變量
        
        int e;                //未初始化局部變量

        int f = 20;           //已初始化局部變量

        NSString *str = @"123";//字符串常量
        
        NSObject *obj = [[NSObject alloc] init];//經過alloc動態分配(實例對象)
        
        NSLog(@"\n&a=%p\n&b=%p\n&c=%p\n&d=%p\n&e=%p\n&f=%p\nstr=%p\nobj=%p\n",
              &a, &b, &c, &d, &e, &f, str, obj);
        
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
複製代碼

上述案例中,包括個各類變量,咱們經過打印來觀察一下它們的內存狀況,結果以下指針

2019-08-26 16:20:25.294729+0800 Interview03-內存佈局[5467:359025] 
&a=0x10fad3db8
&b=0x10fad3e84
&c=0x10fad3dbc
&d=0x10fad3e80
&e=0x7ffee012e1fc
&f=0x7ffee012e1f8
str=0x10fad3068
obj=0x600002d20160
複製代碼

將這些變量按內存地址從小到大排列,再和內存佈局圖對好比下 這樣就驗證了一開始拋出的結論。code

內存管理傳送門🦋🦋🦋

內存管理剖析(一)—MRC時代的手動內存管理orm

內存管理剖析(二)——定時器問題對象

內存管理剖析(四)——autorelease原理分析

內存管理剖析(五)—— weak指針實現原理

相關文章
相關標籤/搜索