美文网首页底层
iOS-OC底层19:内存五大区域

iOS-OC底层19:内存五大区域

作者: MonKey_Money | 来源:发表于2020-11-02 10:28 被阅读0次

由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。栈是向低地址扩展的数据结构,是连续的内存区域,采用后进先出(LIFO )。

优缺点:

快速高效

缺点

有限制,数据不灵活[LIFO]
iOS主线程栈大小是1MB
其他线程是512KB
MAC是8M

由程序员分配和释放,若程序员不释放,程序结束时可能由系统回收。堆是向高地址扩展的数据结构,是不连续的内存区域,以链表的方式进行存储。

优点

灵活方便,数据适应面广泛

缺点

效率有一定降低

全局区(静态区)

全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量放在一块区域,未初始化的静态变量和未初始化的动态变量是在相邻的区域的,程序结束后系统释放。

常量区(数据段)

存放常量字符串程序结束后由系统释放

代码区

存放函数的二进制代码

补充

栈帧

C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。

栈溢出

栈顶的地址和栈的最大容量是系统预先规定的,只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常来提示栈发生溢出。

堆溢出

堆溢出是指程序向某个堆块中写入的字节数超过了堆块本身可使用的字节数(之所以是可使用而不是用户申请的字节数,是因为堆管理器会对用户所申请的字节数进行调整,这也导致可利用的字节数都不小于用户申请的字节数),因而导致了数据溢出,并覆盖到物理相邻的高地址的下一个堆块。

相关文章

  • iOS-OC底层19:内存五大区域

    栈 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。栈是向低地址扩...

  • iOS 内存

    五大内存区域 栈区,堆区,全局区,常量区,代码区,五大内存区域之外还有 自由存储区也称之五大区域之外区、 栈区创建...

  • iOS 底层基础知识(1)

    1.五大内存区域 栈区,堆区,全局区,常量区,代码区五大内存区域之外还有 自由存储区也称之五大区域之外区 1.1栈...

  • IOS底层原理-内存五大区域

    介绍内存的五大区域:栈区,堆区,静态区,常量区,代码段 栈区 局部变量和方法实参 栈区特点: 存储空间有限 . i...

  • iOS内存管理

    内存中的五大区域引用计数ARC MRC属性所有权僵尸对象、野指针、空指针分别指什么,有什么区别? 内存中的五大区域...

  • 内存五大区

    iOS内存五大区 在iOS中,内存主要分为 五大区域。如下图所示 下面分别介绍这五大区 *栈区 stack 定义...

  • iOS-OC底层27:内存管理

    1.小对象类型 面试题 taggedPointerDemo正常打印,taggedPointerDemo2 cras...

  • iOS的内存5大区

    1. 内存中的五大区域 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段 栈:存储局部...

  • iOS-底层原理22:内存五大区

    在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域。如下图所示 注意:内存五大区,实际是指虚拟内存...

  • 对象在内存中的存储。

    1. 内存中的五大区域. 栈: 存储局部变量. 堆:...

网友评论

    本文标题:iOS-OC底层19:内存五大区域

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