美文网首页
##iOS中堆和栈的区别

##iOS中堆和栈的区别

作者: 枫叶无处漂泊 | 来源:发表于2019-02-24 22:56 被阅读0次

前言

在我们编程中,不可避免的使用堆和栈内存,它们是什么?有什么区别?下面我从几个方面来说明区别

使用内存的行为

  • 创建一个对象
  • 定义一个变量
  • 调用一个函数和方法

一、管理方式

  • 栈:
    是由编译自动管理,无需我们手工释放内存
  • 堆:
    释放工作由程序员控制,容易产生内存泄漏。

二、申请地址大小

  • 栈:
    栈是向低地址扩展的数据结构,是一块连续的内存区域,从栈获得的空间较小,效率高。
  • 堆:
    堆是向高地址扩展的数据结构,是不连续的内存区域。,堆获得的空间比较灵活、比较大。

三、内存碎片问题

  • 堆:
    频繁的new/realease势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。
  • 栈:
    不会存在内存碎片问题,因为栈是先进后出的队列,他们是--对应,以至于永远都不可能有一个内存块从栈中间弹出。

四、分配方式问题

  • 堆:
    堆是动态分配的,没有静态分配的堆。
  • 栈:
    有两种分配方式:静态分配和动态分配.
    • 静态分配:
      是编译器完成的,比如局部变量的分配.
    • 动态分配:
      由alloc函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现.

五、分配效率

  • 栈:机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。
  • 堆:
    堆则是c/c++函数提供的,他的机制很复杂。效率相对低。

总结

申请栈的内存百分百回收,堆内存不一定百分百回收,容易出现内存碎片。

相关文章

  • iOS 栈和堆总结

    转载自 :大神博客iOS程序中的内存分配iOS 堆和栈的区别block与propertyiOS中__block 关...

  • iOS中堆和栈的区别

    分区: 1,栈区(stack)由编译器自动分配释放,存放函数(方法)的参数值,局部变量的值等,栈是由高地址向低地址...

  • iOS中堆和栈的区别

    先附一张图,这里只说堆和栈 栈区(stack)由编译器自动分配释放,存放方法(函数)的参数值,局部变量的值等 堆区...

  • ##iOS中堆和栈的区别

    前言 在我们编程中,不可避免的使用堆和栈内存,它们是什么?有什么区别?下面我从几个方面来说明区别 使用内存的行为 ...

  • iOS中堆和栈的使用

    iOS中堆和栈的使用

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • iOS 堆和栈的区别?

    前言 堆和栈是什么?有什么区别?是干嘛的?啥东西呀这是?别急,慢慢看下去 内存管理 移动设备的内存及其有限,每一个...

  • iOS 堆和栈的区别

    OC对象存放于堆里面(堆内存要程序员手动回收) 非OC对象一般放在栈里面(栈内存会被系统自动回收) 堆里面的内存是...

  • iOS 堆和栈的区别

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”,OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会...

网友评论

      本文标题:##iOS中堆和栈的区别

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