内存

作者: iOS_SXH | 来源:发表于2017-02-27 17:21 被阅读0次

一、程序的内存分配

一个由C/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack):   由编译器自动分配释放  ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap):一般由程序员分配释放,  若程序员不释放,程序结束时可能由OS回收  。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。  -  程序结束后由系统释放。

4、文字常量区 :常量字符串就是放在这里的。  程序结束后由系统释放

5、程序代码区:存放函数体的二进制代码。

堆和栈的区别


二、堆栈数据结构

堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构。

栈是LIFO,先进后出; 堆是FIFO,先进先出。

堆栈空间分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表

堆栈缓存方式

栈:一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆:存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。


3、iOS的静态方法(类方法)和实例方法

1:区别

1>:标识符:

实例方法--> " - "(减号)

静态方法-->" + "(加号)

2>:调用对象

实例方法-->调用方式:(实例对象    函数

静态方法-->调用方式:(类    函数)

2>:内存位置

实例方法-->在堆栈上(栈)

静态方法-->在堆上分配内存(堆)

2:方法的区分(从内存角度+调用对象 来看)

a).静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

b).静态方法在堆上分配内存,实例方法在堆栈上。事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个区域是不可写的。

c).实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。

d).静态方法是静态绑定到子类,不是被继承。

e).一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。

f).静态方法修改的是类的状态,而对象修改的是各个对象的状态。

g).类的实例调用是在类的生命周期中存在,当类没有了以后,对应的实例也就没有了,对应的方法也就没有了。静态类不然,只要你引用了那个静态类的命名空间,它就会一直存在,直到我们推出系统。

IOS基础——静态方法(类方法)和实例方法

3

3

相关文章

  • Linux 内存管理 应用篇

    1、物理内存和虚拟内存 物理内存:物理内存就是系统硬件提供的内存大小,是真正的内存 虚拟内存:为了满足物理内存的不...

  • linux io与zero copy

    1. 物理内存与虚拟内存 1.1 物理内存 物理内存指通过物理内存条而获得的内存空间。 1.2 虚拟内存 虚拟内存...

  • 性能优化<第五篇>:内存优化

    1、为什么要内存优化? 2、了解内存中的内容 3、内存上限 4、GC内存回收机制 5、内存泄漏、内存抖动、内存溢出...

  • JVM第二天-volatile final synchroniz

    1.JAVA内存模型 简单的讲,Java 内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程...

  • 伙伴算法和slab算法

    0. 内存管理问题 内存碎片太小和管理内存碎片的效率问题 内存碎片:回收内存时,将内存块放入free链表中。因内存...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 物理内存和虚拟内存

    物理内存 物理内存是真实的内存大小,即内存条内存大小 虚拟内存 虚拟内存是为了满足系统对超出物理内存容量的需求时在...

  • 5、哪些情况下会导致oom问题?

    1、根据java的内存模型会出现内存溢出的内存有堆内存、方法区内存、虚拟机栈内存、native方法区内存;2、一般...

网友评论

      本文标题:内存

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