内存管理剖析(三)——iOS程序的内存布局

iOS程序安装之后,是以Mach-o文件的格式保存在iOS设备里面,当启动程序时,对应的Mach-o文件就会被加载进内存。下面,就来介绍一下iOS程序的内存布局。首先看下图
iOS程序内存布局

如果你拥有iOS逆向的知识,这个话题对你来说应该如同砍瓜切菜,假如不巧你不懂逆向的话,还有一种方法可以来验证上面的图。看如下测试代码

//*********************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

将这些变量按内存地址从小到大排列,再和内存布局图对比如下

这样就验证了一开始抛出的结论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,170评论 1 32
  • get一项新技能 某年某月某日手残点了桌面最下面任务栏中那个文件夹图标删除,脑回路受损的点了确定,,太不方便了 百...
    minlover阅读 347评论 0 3
  • 你,一直住在我的梦里 我总是想象着自己一个人 坐在摇动着的乌蓬船上 看水乡两岸的老房子 那青瓦和脱落了表皮的泥墙 ...
    五月的荷阅读 193评论 10 17
  • 以前工作累,通过努力,现在做到轻松好多了,可是感情又出问题了,发信息不回复,电话不接,我通过学习婚姻明白,婚姻只能...
    灏颖纸业双儿阅读 128评论 0 0
  • 文/与洛 2018.12.30 怎么可能轻易的认输 别人可以做到你也可以做到 方法是你的选择 那么你就得承当自己的...
    与洛阅读 152评论 0 1