美文网首页
2. 内存分配

2. 内存分配

作者: 算命的李老师 | 来源:发表于2020-09-08 14:55 被阅读0次

==程序在内存空间分布为:==

由低向高 各个地址块 不连续

高地址
  • 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。
  • 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
  • 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。
  • 文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放。
  • 程序代码区:存放函数体的二进制代码。
低地址

==内存管理方案==分三部分

TaggedPointer  //存放NSNumber等小对象
NONPOINTER_ISA        //arm64位架构下内存管理方案
散列表SideTables  //是由一个个sideTable结构组成,是一个哈希表,sideTable包含弱引用表和引用计数表和自旋锁
NONPOINTER_ISA

arm64架构下才用

散列表方式 SideTables()结构

SideTables()实际上是个哈希表,可通过一个对象指针,来找到它的引用计数表或者弱引用表具体在哪个sideTable中。

[图片上传失败...(image-8c89dd-1599486679760)]

==栈和堆==

栈是一个用来存储局部和临时变量的存储空间

NSObject *obj = [[NSObject alloc] init];

系统会在栈上存储obj这个指针变量,它所指的对象在堆中。通过[NSObject alloc]系统会为其在堆中开辟一块内存空间。
栈对象的生命周期不适于Objective-C的引用计数内存管理方法

相关文章

  • 2. 内存分配

    ==程序在内存空间分布为:== 由低向高 各个地址块 不连续 高地址 栈区(stack):由编译器自动分配释放 ,...

  • 2. Buffer内存分配

    Buffer对象的内存分配不是在V8的堆内存中,而是在Node的C++层面实现内存的申请的。因为处理大量的字节数据...

  • C,C++内存分配

    C语言内存分配: 静态内存分配,分配内存大小的是固定,问题:1.很容易超出栈内存的最大值 2.为了防止内存不够用会...

  • JVM内存分配策略

    操作系统的三种内存分配方式: 1.静态内存分配策略 在编译时就能确定运行时的内存需求。 2.栈内存分配策略 ...

  • OOM与内存优化一

    内存管理基础Java内存分配模型 Java的对象生命周期 1.创建 为对象分配内存空间 构造对象 2.应用 此时...

  • C语言基础(4)——动态分配内存及文件的相关内容

    本节内容1.动态分配内存2.文件的相关内容3.动态分配内存实战——名字的输入与输出4.结构体 (一)动态分配内存1...

  • 内存管理

    一、内存管理机制概述 1.分配机制 2.回收机制 二、Android内存管理机制 1.分配机制 根据物理手机的内存...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • JavaScript内存管理

    内存生命周期 不管什么程序语言,内存生命周期基本是一致的:1.分配你所需要的内存2.使用分配到的内存(读、写)3....

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

网友评论

      本文标题:2. 内存分配

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