美文网首页
iOS中:栈和堆概念

iOS中:栈和堆概念

作者: Dayu大鱼 | 来源:发表于2018-02-09 13:21 被阅读26次

iOS中栈和堆

栈: 系统自动分配内存
堆: 程序员手动分配内存

代码示例:
import "JKViewController.h"

@interface JKViewController ()

@end

@implementation JKViewController
int num = 1;//数据区(全局区/静态区)
NSString str;//BSS区(全局区/静态区)
static NSString str2 = @"string";//静态区(静态初始化区/全局区)

    (void)viewDidLoad {
    [super viewDidLoad];
    int age;//栈
    NSString name = @"xiaoming";//栈
    NSString number = @"123";//123在常量区,number在栈上
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:1];//分配而来的8字节的区域就在堆中(相当于alloc分配内存),array在栈中,指向堆区的地址

}
/
方法中的num1和num2都在栈中,返回值num也暂存在栈中 /

    (int)changenum1:(int)num1 num2:(int)num2{
    int num = num1 + num2;
    return num;
    }
    @end

1、代码区:用来存放函数的二进制代码,在运行时要防止被非法修改,只允许读取不允许操作
2、常量区:存储常量
3、静态区:(比如static声明的变量)
数据区:存放程序静态分配的变量和全局变量
BSS:包含了程序中未初始化全局变量

堆:

由程序员分配和释放,存放进程运行中被动态分配的内存段,可大可小,根据存储的多少来调节大小。调用alloc等分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用realse释放内存时,被释放的内存从堆中被踢除(堆被缩减),因为我们现在iOS基本都使用ARC来管理对象,所以不用我们程序员来管理,但是我们要知道这个对象存储的位置

栈:

栈是由编译器自动分配并释放,用来存放函数括弧“{}”中定义的变量。当函数被调用时,函数带有的参数也会被压入发起调用的进程栈中,待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。可以把栈看成一个临时数据寄存、交换的内存区

以上中堆和静态区以及常量区都是连续的,栈和代码区都是独立存放的,栈是向低地址扩展的数据结构,是一块连续的内存的区域。堆是向高地址扩展的数据结构,是不连续的内存区域。堆和栈不会碰到一起,之间间隔很大,绝少有机会能碰到一起,况且堆是链表方式存储!

(非原创)参考博文: http://www.cocoachina.com/bbs/read.php?tid=1714799

相关文章

  • iOS中:栈和堆概念

    iOS中栈和堆 栈: 系统自动分配内存堆: 程序员手动分配内存 1、代码区:用来存放函数的二进制代码,在运行时要防...

  • iOS中堆和栈的使用

    iOS中堆和栈的使用

  • js/jquery 学习笔记

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

  • C++(98/11)问题 (1)

    一、内存问题 1、堆和栈 首先需要确定的是这里堆和栈不是数据结构中堆和栈的概念。 相同点:都分别叫heap sta...

  • Objective-C中的Block

    .相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解。 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与数...

  • Objective-C中的Block

    1.相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解。 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与...

  • iOS中堆和栈的

    1.栈区(stack): 存放函数的参数值、局部变量的值等,由编译器自动分配释放,通常在函数执行结束后就释放了,其...

  • iOS中的堆和栈

    内存分配图: 参考: iOS中堆和栈的理解 What and where are the stack and he...

  • iOS 栈和堆总结

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

  • iOS 堆和栈

    在具体的C/C++编程框架中,这两个概念并不是并行的。栈是机器系统提供的数据结构,而堆则是C/C++函数库提供的 ...

网友评论

      本文标题:iOS中:栈和堆概念

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