Objective-C编译的程序占用内存分布的结构
2017-04-12 本文已影响0人
Corbin___
一、介绍
- 参考链接: http://www.cocoachina.com/ios/20150109/10891.html
- 本文将介绍oc的内存分布结构,尤其是堆栈
二、内存分布结构图

三、概念
栈区:系统自动分配和管理内存,存放方法参数、局部变量等(就是变量名都储存在栈上,这样应该可以)
堆区:需要程序猿手动创建内存和注销
全局区/静态区:存放全局变量或者静态变量
文字常量区:存放字符串
程序代码区:存放二进制代码
什么时候销毁呢?
上面的所有区域在变量在程序结束的时候,都会由系统自动释放
四、例子
// 类似以下的全局变量静态变量,就是在全局/静态区了
static NSString *str;// 全局变量,是在全局区
- (void)clicked:(NSString *)str {
// str 是方法参数,栈里
int a = 0; // a是局部变量,栈里
#注意:这个str是方法参数所以在栈里,但是"123456"这个是字符串所以在文字常量区
str = @"123456";
#注意:这个是我们手动创建的,但是view这个变量(指针)是在栈里面的,
#但是这个view指向的内存空间是在堆里面的
UIView *view = [[UIView allow] init];
}