美文网首页
《关于栈和堆理解》

《关于栈和堆理解》

作者: 不够果断是种癌 | 来源:发表于2019-04-23 15:19 被阅读0次

本文仅供自我学习,禁止转载。

Objective-C的对象在内存中是以堆的方式分配内存的,并且堆内存是由你释放的。这个是MRC,不过后来出了ARC很多就由系统自动释放,如果系统不能手动释放的则需要我们手动释放,不释放则会引起内存泄漏。这个操作方式和数据结构中的栈很像。堆都是动态分配内存。堆有静态分配内存和动态分配内存。栈的话是先进后出。堆是先进先出。栈的内存空间分配是连续的,堆的内存空间非配是不连续的。alloc 在堆上申请一块空间返回一个指针,这个指针在栈上,申请的空间在堆上,所以对象也存储在堆上。

网上给出的解释是:

栈是一种数据结构。

1、栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

2、栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

3、栈可以用来在函数调用的时候存储断点,做递归时要用到栈。

1、栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2、栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

言归正传

接着我们探讨一下Objective-C中的push和pop。我们来猜一下系统在这个过程中做了什么

事。简单来说,push就是进栈,pop就是出栈。楼主总结了一张图。今天就到这里了。

本来还准备写一篇如何查看堆和栈及调试的文章,但是网上有一篇调试文章写的很好我就不写了。给大家一个传送门。《点完进行传送》

相关文章

  • 《关于栈和堆理解》

    本文仅供自我学习,禁止转载。 Objective-C的对象在内存中是以堆的方式分配内存的,并且堆内存是由你释放的。...

  • js/jquery 学习笔记

    理解JavaScript中的堆和栈 这里先说两个概念:1、堆(heap)2、栈(stack)堆是堆内存的简称。栈是...

  • 堆和栈的理解

    一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编...

  • 关于JS的堆和栈的理解

    一、堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存...

  • 数据结构复习笔记 - 栈

    如何理解“栈”? 关于“栈” - 模型 堆盘子 后进者先出,先进者后出,这就是典型的“栈”结构 栈是一种“操作受限...

  • 缓冲区溢出提纲

    缓冲区溢出简单的来讲分为两种 栈溢出 堆溢出 那么什么是栈什么是堆呢 在这里简单谈一下对于堆和栈的理解 : 栈: ...

  • iOS堆和栈的理解

    操作系统iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“...

  • 对堆和栈的理解

    对堆和栈的理解 管理方式:对于栈来讲,是由编译器自动管理,而堆是由我们手动控制,容易产生内存泄漏 申请大小:栈:是...

  • 堆和栈的区别

    今天学习block的时候,看到了一些关于内存的东西,其中就有关于堆和栈的,简单说一下自己的理解,当然不算深入。 堆...

  • JVM调优

    一、理解堆和栈的区别1:堆是存储数据的,栈中是存储程序的执行逻辑2:堆中存放基本数据类型以及对象的引用,栈中存储对...

网友评论

      本文标题:《关于栈和堆理解》

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