美文网首页
初始链表

初始链表

作者: 萧修 | 来源:发表于2023-03-23 10:16 被阅读0次

链表(linked list)

本文目标:了解链表结构,并回顾之前iOS内存管理中的自动释放池

自动释放池poolpage用的栈的数据结构实现对象操作的,但是poolPage是双向链表的形式连接。
引入了的数据结构,论思维导图的重要性,知识点都是相互连接的。

链表是在非连续的内存单元中保存数据,通过指针将内存单元连接在一起。基本结构有指针域和值域两部分

入门释放池熟悉链表

回顾之前的源码

//第一步有push压栈操作
void *objc_autoreleasePoolPush(void) {
    return AutoreleasePoolPage::push();
}

void objc_autoreleasePoolPop(void *ctxt) {
    AutoreleasePoolPage::pop(ctxt);
}

//重点来了
class AutoreleasePoolPage {
    magic_t const magic;
    id *next;
    pthread_t const thread;
    AutoreleasePoolPage * const parent;
    AutoreleasePoolPage *child;
    uint32_t const depth;
    uint32_t hiwat;
};

每一个自动释放池都是由一系列的 AutoreleasePoolPage 组成的,并且每一个 AutoreleasePoolPage 的大小都是 4096 字节(16 进制 0x1000)

双向链表的实现(之外还有单向链表,循环链表)
释放池的AutoReleasePoolPage之间的连接是双向链表的形式。其中parent child构造前后指针。

当Pool:push()也就是压栈操作时,会涉及到一个点hotpage。查看当前页是否满,满了就parent创建新的poolpage。要查到或创建的 新的poolpage作为hotpage,去添加对象。不存在hotpage的情况当然创建新的poolpage.

这句话就涉及到计算机语言(oc/swift/c++)的流程控制if、else

通知通信

除此之外,通知中心NSNotification的数据结构的里面实现也用的了这个结构,NSNotificationCenter维护的链表一对象key保存,多个观察者的情况。
这个具体的底层实现,还有待研究。

链表的优势和数组对比

  1. 插入删除方便。不需要移动元素

不同:

  1. 链式存储,数组的顺序存储
  2. 链表通过指针连接元素,数组通过元素的依次存储(内存存储中的连续...)
  3. 链表的查询元素比较困难,指针查找了解下,方便扩容,数组插入删除麻烦,但是查找快啊

两者都能实现数据顺序存储,构造的模型是线性的(一条线),逻辑关系

多刷LeetCode的链表题
扩充几个知识点(双指针,快慢指针、链表反转)都是可以去了解的几个点

相关文章

  • 线性表:顺序表和链表

    顺序表(数组)优缺点 链表优点 单链表使用 单链表结构 单链表初始化 单链表初始化 单链表建立: 头插法 尾插法 ...

  • python数据结构——单链表

    链表 python实现链表链表的初始化创建元素的插入和删除链表的遍历元素的查询链表的删除链表的逆序判断链表是否有环...

  • 双向链表和双向循环链表

    双向链表 线性表-双向链表的结点结构: 带头结点的双向链表: 1.双向链表初始化 2.遍历双向链表 2.双向链表插...

  • [数据结构]第二章线性表(4)——双链表

    双链表 单链表VS双链表 双链表基本操作 初始化 插入 优化之后 删除 遍历 总结反思 源码 源码查看地址,点击 ...

  • C语言中的链表(3)②

    双向链表中的双向循环链表的实现 第一步,创建出节点和链表并且进行初始...

  • 单链表 C++

    单链表 C++ 题目 1、创建单链表2、初始化单链表3、释放单链表4、获取单链表中元素的数量5、输出单链表中的所有...

  • 数据结构 ⑤ 双向循环链表

    双向循环链表的实现 初始化/* 初始化 */void DuLinkListInit(DuLinkList *He...

  • [数据结构]第二章线性表(5)——循环链表

    循环链表 循环单链表 具体实现: 优势: 循环双链表 初始化 插入 删除 总结反思 源码 源码查看地址,点击 传送...

  • 线性表练习题

    初始设置 1. 题目1 将2个递增的有序链表合并为⼀个链表的有序链表。 要求: 结果链表仍然使⽤两个链表的存储空间...

  • 数据结构(5)-线性表面试题

    准备工作 定义单链表结构,初始化单链表,通过数组生成单链表,打印链表元素。 正题 将2个递增的有序链表合并为⼀个有...

网友评论

      本文标题:初始链表

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