美文网首页
iOS-堆栈的联系和区别、

iOS-堆栈的联系和区别、

作者: 晴天ccc | 来源:发表于2018-04-23 09:24 被阅读0次

objective-c 对象所占内存总是分配在“堆空间” (为什么存放在堆中而不是栈中),并且堆内存是由你释放的,即release。

栈是由编译器管理自动释放的,在方法中(函数体)定义的变量通常在栈内。

分配方式:

对于来说,是由编译器来自动分配释放的,无需我们手动操控。存放函数的参数值,局部变量等。

对于来说,分配和释放工作是由程序员控制,容易产生内存泄漏(memory leak)。

 栈是一个用来存储局部和临时变量的存储空间。在现在操作系统里面,一个线程会分配一个栈。当一个函数被调用的时候,一个栈帧会压到栈里,里面包含了这个函数涉及的参数,局部变量,返回地址等相关信息。当函数返回的后,这个栈帧会被销毁。栈对象的生命周期仅限于其所在的块里,出了块就立马被释放。一切都是自动的、无需自己调度。

堆,从本质来说,程序所有都在内存中(有些东西是不在堆栈中的,但在这篇文章中我们不作讨论)。在堆上,我们可以任何时候分配内存空间和释放销毁它,如果你不使用垃圾回收机制,你必须显示的去释放它。这就是在你的函数调用前需要完成的事情。简单来说,就是alloc与release。

NSObject *obj = [[NSObject alloc] init];

系统会在栈上存储obj这个指针变量,它所指的对象在堆中。

通过[NSObject alloc]系统会为其在堆中开辟一块内存空间,并为其生成NSObject所需内存结构布局。


最后借用网上有个有个很经典的例子:

使用栈就像是我们去饭馆里吃霸王餐,只管点菜(发出申请),吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作。好处是快捷,但是自由度比较小,人家做成什么样的菜你就吃什么样的。

使用堆就像是自己动手买菜,做菜,刷锅,洗碗。比较麻烦,但是自由度比较大

相关文章

  • iOS-堆栈的联系和区别、

    objective-c 对象所占内存总是分配在“堆空间” (为什么存放在堆中而不是栈中[https://www.j...

  • 堆、栈

    栈, 也叫堆栈 堆和栈的区别: 堆栈空间分配区别:1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,...

  • 堆栈区别

    五大内存分区在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由...

  • 堆栈区别

    理解不透彻,实在是无法写清楚,记录下过程吧 为了理解堆栈区别,我对比 c++,java,APP,javascipt...

  • 堆栈的区别

    stack 对象的创建 只要heap的剩余空间大于stack对象申请创建的空间, 操作系统就会为程序提供这段内存空...

  • 堆栈的区别

    全文来自https://zhuanlan.zhihu.com/p/51612643一般问到堆栈的区别都是问你操作系...

  • UIView和CALayer

    问题:UIView和CALayer的区别与联系是什么?UIWindow和UIView和CALayer 的联系和区别...

  • 内存管理面试复习

    内存管理模块 看目录 1. 为何有堆栈,说说堆栈的区别,分别存放什么,为什么要有堆和栈,对象为何放到堆上,有没有栈...

  • 简单数据类型和复杂数据类型

    1 - 简单数据类型和复杂数据类型 1.1 简单数据类型 1.2 复杂数据类型 1.3 堆栈 堆栈空间分配区别: ...

  • 2017.12.20 头条Android内推一二三四面

    一面(视频面试 40min) 进程和线程之间的区别 操作系统堆栈(JVM的堆栈) 两个拥有不同数量线程的进程,执行...

网友评论

      本文标题:iOS-堆栈的联系和区别、

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