美文网首页
iOS关于堆栈的理解

iOS关于堆栈的理解

作者: 福尔摩罗 | 来源:发表于2018-01-12 10:58 被阅读0次

栈区(stack):存放局部变量和函数的参数值,由编译器自动释放内存,当函数结束时自动释放,其操作方式类似于数据结构中的栈,栈内存分配运算内置于处理器的指令集,效率较高,但是分配的内存比较小。

堆区(heap) :就是通过new malloc 分配的内存块,他们的生命周期 由程序员自行管理,可以是全局变量,也可以是局部变量,在应用程序结束的时候 自动释放。

栈区生命周期理解:

-(void)viewDidLoad{
[super viewDidLoad];
int a = 0;
int b = 1;
}

如上代码,当viewDidLoad函数结束时,局部变量a和b的作用域已经结束,编辑器就会释放掉 a和b 的内存。

堆区 生命周期理解:

@interface ViewController ()
{
    NSArray * dataArr;
}
@end

@implementation ViewController

- (void)viewDidLoad {
       [super viewDidLoad];
       dataArr = [NSMutableArray array];
}

-(void)viewDidAppear:(BOOL)animated{
          [super viewDidAppear:animated];
          daArr =@[@"1",@"2"];
}

在viewDidLoad函数中,对dataArr进行初始化,在堆中分配内存块,当viewDidLoad函数结束时,dataArr因为是全局变量没有被销毁,程序员就可以自己来管理它的生命周期。

总结:
栈区和堆区的区别主要为以下几点:

1.对于栈来说,内存管理由编译器自动分配释放;对于堆来说,释放工作由程序员控制。
2.栈的空间大小比堆小许多。
3.栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,所以分配效率比堆高。
4.栈中存储的变量出了作用域就无效了,而堆由于是由程序员进行控制释放的,变量的生命周期可以延长。

相关文章

  • iOS关于堆栈的理解

    栈区(stack):存放局部变量和函数的参数值,由编译器自动释放内存,当函数结束时自动释放,其操作方式类似于数据结...

  • iOS 堆栈的理解

    Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管...

  • iOS 关于堆栈

    iOS 关于堆栈 1. 堆栈定义低位地址的 内存块。 (执行速度最快, 先进后出, 大小比堆小,不需要手动释放内存...

  • 关于堆栈的简单理解

    参考地址:http://soft.chinabyte.com/database/407/11319907.shtm...

  • 堆栈 存储空间

    参考文献 iOS--------对堆、栈 存储空间的理解 局部变量、 全局变量、 堆、 堆栈、 静态和全局 iOS...

  • iOS基础补完计划--透过堆栈看事件响应机制

    iOS基础补完计划--透过堆栈看事件响应机制 iOS基础补完计划--透过堆栈看事件响应机制

  • iOS开发堆栈你理解多少?

    浅谈堆栈理解 Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release...

  • MRC下的内存管理

    1>关于堆栈的理解 链接:https://www.jianshu.com/p/c3344193ce02 什么行为会...

  • iOS ARM64 汇编入门

    这里主要介绍 iOS 平台上 ARM64 架构的寄存器和指令以及内存堆栈。 堆栈 在 iOS 中,栈空间是向下生长...

  • iOS解析crash,系统堆栈没有符号化问题

    在使用symbolicatecrash去解析ios crash时,经常发现自己app的堆栈都解析了。但是系统的堆栈...

网友评论

      本文标题:iOS关于堆栈的理解

      本文链接:https://www.haomeiwen.com/subject/iunxoxtx.html