美文网首页
堆(heap),栈(stack)与变量

堆(heap),栈(stack)与变量

作者: 陌上北辰 | 来源:发表于2017-06-30 11:08 被阅读60次

堆(heap):
是指内存中的一块区域,应用中的所有对象都会保存在堆中,而非Object-C 对象一般放在栈里,栈内存会被系统回收。当应用向某个类发送alloc消息时,系统会从堆中分配出一个内存,其大小足够存放相应对象的全部实例变量。
e.g.:
以下以:NSDate对象为实例来解释实例的内存分配问题:
该对象可以代表某个特定的时间点。它包含2个实例变量:一个时double类型的变量(用于保存从某个固定的时间点算起的时间差,单位秒),另一个是继承自NSObject的isa指针(所有的对象都会继承)。一个double变量的大小是8个字节,而一个指针变量大小是4个字节。因此,当NSDate类型收到alloc消息时,系统会为堆上新的NSDate 对象分配一个大小为12个字节的内存

注:
一个对象永远不会直接保存另一个对象,所有的对象在堆中都是独立存在的。

(栈)stack:
是指内存中的另一块区域,和堆是分开的。
堆:包含大量无序的对象,需要通过指针来保存这些对象在堆中的地址,
栈:则会按后进先出的规则保存一组帧(frame),当程序执行某个方法(或函数)时,会从栈中分配一块内存空间,这块内存空间称为栈帧。
栈帧。栈帧负责保存程序在方法内的声明的变量的值。从方法内声明的变量叫局部了变量
当某个应用程序启动并运行main函数时,他的栈帧数会被保存在栈的底部。当main调用另一个方法(或函数)时,这个方法(或函数)的栈帧会被压入栈的顶部。被调用的方法还可以再调用其他方法,依次类推,最终会在栈中形成塔状的栈帧序列。当被调动的方法结束时,程序会将其栈帧从栈中“弹出”并释放。如果同一次的方法再次被调用,则应用会创建一个全新的栈帧,将其压入栈顶

变量:
成员变量与属性
成员变量:成员变量默认是@protected,外部如果要调用,需要在头文件中声明,并设置为@public
属性:
若在.h 文件中声明,则外部可以用,若在.m文件中声明,则类内可以用

局部变量:
定义:写在函数或代码中的变量,称之为“局部变量”
作用域:从定义的那一行开始,直到大括号或者return
存储: 栈

全局变量:
定义:写在函数和大括号之外的变量,我们称之为全局变量
作用域:从定义的那一行开始,一直到文件末尾
存储:静态区

静态变量:
定义;在变量声明前加上关键字static
作用域:静态局部变量,静态全局变量
存储:静态区

相关文章

  • 堆(heap),栈(stack)与变量

    堆(heap):是指内存中的一块区域,应用中的所有对象都会保存在堆中,而非Object-C 对象一般放在栈里,栈内...

  • 程序在内存中的分配情况

    1. heap (堆) 动态变量存在堆区 2. stack(栈) 局部变量存在栈区 3. data(数据区:con...

  • javascript堆和栈

    javascript变量类型分为基本类型和引用类型 栈 stack”和“堆 heap” 简单的来讲,stack上分...

  • 数组与伪数组

    标准库,js内存里两种stack栈内存,heap堆内存stack重要变量global/window,window是...

  • 9.构造器与垃圾收集器

    堆(heap)——对象、对象的实例变量在堆上栈(stack)——方法调用和局部变量在栈上 实例变量:实例变量是被声...

  • 关于JS的堆和栈的理解

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

  • 理解js里堆和栈的意义

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

  • C语言基础

    内存分五块: 栈 (Stack) - 小,快 - 临时变量或者局部变量 - 值类型的对象堆 (Heap) - 大,...

  • 变量和gc

    引用链接:php变量与gc 栈区stack 存储参数值,局部变量,维护函数调用关系 堆区heap 动态内存区域,随...

  • 内存中的堆栈

    动态变量存在于堆(heap)中,局部变量和函数参数存在于栈(stack)中。调用 new,就分配到 heap,否则...

网友评论

      本文标题:堆(heap),栈(stack)与变量

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