如果你拥有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
将这些变量按内存地址从小到大排列,再和内存布局图对比如下
这样就验证了一开始抛出的结论。
网友评论