Objective-C编译的程序占用内存分布的结构

一、介绍

  • 参考链接: http://www.cocoachina.com/ios/20150109/10891.html
  • 本文将介绍oc的内存分布结构,尤其是堆栈

二、内存分布结构图

Objective-C编译的程序占用内存分布的结构_第1张图片
借用老前辈的图,请见谅!

三、概念

栈区:系统自动分配和管理内存,存放方法参数、局部变量等(就是变量名都储存在栈上,这样应该可以)
堆区:需要程序猿手动创建内存和注销
全局区/静态区:存放全局变量或者静态变量
文字常量区:存放字符串
程序代码区:存放二进制代码

什么时候销毁呢?

上面的所有区域在变量在程序结束的时候,都会由系统自动释放

四、例子

// 类似以下的全局变量静态变量,就是在全局/静态区了
static NSString *str;// 全局变量,是在全局区

- (void)clicked:(NSString *)str {
        // str 是方法参数,栈里
        int a = 0; // a是局部变量,栈里
        #注意:这个str是方法参数所以在栈里,但是"123456"这个是字符串所以在文字常量区
        str = @"123456"; 
        #注意:这个是我们手动创建的,但是view这个变量(指针)是在栈里面的,
        #但是这个view指向的内存空间是在堆里面的
        UIView *view = [[UIView allow] init];
}


你可能感兴趣的:(Objective-C编译的程序占用内存分布的结构)