iOS 程序的内存布局如下
举例:
int a = 10; // 已初始化全局变量(数据段)
int c; // 未初始化的全局变量(数据段)
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
static int b = 20; // 已初始化的静态变量(数据段)
static int d; // 未初始化的静态变量(数据段)
int e = 30; // 局部变量(栈区)
int f; // 局部变量(栈区)
NSString *str = @"123"; // 字符串常量区(数据段)
NSObject *obj = [[NSObject alloc] init]; // 堆区
NSLog(@"\n&a=%p\n&b=%p\n&c=%p\n&d=%p\n&e=%p\n&f=%p\n&str=%p\n&obj=%p\n", &a, &b, &c, &d, &e, &f, str, obj);
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
打印结果如下:
&str=0x1050f1040 // 数据段的字符串常量,地址相对较小
&a=0x1050f3520 // 数据段已初始化的全局变量
&b=0x1050f3524 // 数据段已初始化的静态变量
&c=0x1050f35ec // 未初始化的全局变量(数据段)
&d=0x1050f35e8 // 未初始化的静态变量(数据段)
// 可以看出,分配的地址越来越小
&e=0x7ffeeab0fcc4 // 局部变量(栈区)
&f=0x7ffeeab0fcc0 // 局部变量(栈区)
&obj=0x6000011cc110 // 对象(堆区)