关于内存布局
我们来验证一下。
int a ;
int b = 0;
int main (void) {
static int c = 0;
int d;
int e = 0;
static int g;
NSString *string = @"ads";
NSObject *f = [[NSObject alloc] init];
NSLog(@"未初始化的全局变量:%p", &a);
NSLog(@"已初始化的全局变量:%p", &b);
NSLog(@"已初始化的静态变量:%p", &c);
NSLog(@"未初始化的静态变量:%p", &g);
NSLog(@"未初始化的自动变量:%p", &d);
NSLog(@"已初始化的自动变量:%p", &e);
NSLog(@"alloc分配的对象:%@", f);
NSLog(@"字符串常量%p", string);
return 0;
}
未初始化的全局变量:0x1000021bc
已初始化的全局变量:0x1000021b8
已初始化的静态变量:0x1000021c0
未初始化的静态变量:0x1000021c4
未初始化的自动变量:0x7ffeefbff488
已初始化的自动变量:0x7ffeefbff484
alloc分配的对象:<NSObject: 0x10300c190>
字符串常量0x100001028
Program ended with exit code: 0
可以看到顺序从小到大是:
字符串常量、已初始化的全局变量、未初始化的全局变量、已初始化的静态变量、未初始化的静态变量、alloc分配的对象、已初始化的自动变量、未初始化的自动变量。
验证完毕。