链表的一个实际应用

合集 · 直观理解计算机技术【CoreDumped】 (68)

  1. 11:03
    代码中指定变量类型为何如此重要?
  2. 13:46
    栈为何如此之快?
  3. 17:53
    堆为何如此之慢?
  4. 19:56
    动态数组的内部机制(ArrayList VS LinkedList)
  5. 15:37
    探索计算机并发与多任务处理的历史
  6. 12:54
    晶体管是如何运行代码的?
  7. 16:12
    晶体管是如何记忆数据的?
  8. 18:47
    制作一个CPU来运行程序
  9. 11:23
    计算机如何将字符串转换为数字
  10. 17:18
    动态随机存取存储器(DRAM)的工作原理
  11. 16:05
    计算机处理器是如何运行条件和循环的?
  12. 6:51
    一个程序不是一个进程
  13. 14:52
    深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
  14. 20:20
    处理器内部的单个位如何保护操作系统的完整性?
  15. 13:14
    计算的心跳:时钟如何推动 CPU 前进?
  16. 14:22
    英语原声版-计算的心跳:时钟如何推动 CPU 前进?
  17. 14:15
    (英语原声)进程间通信:共享内存或发送消息
  18. 12:29
    (中文配音)进程间通信:共享内存或发送消息
  19. 14:59
    (中文配音)为什么单核处理器需要线程?
  20. 16:07
    (英语原声)为什么单核处理器需要线程?
  21. 9:26
    (中文配音)多核系统上的线程
  22. 11:27
    (英语原声)多核系统上的线程
  23. 11:52
    (中文配音)为什么应用程序是特定于操作系统的?
  24. 13:09
    (英语原声)为什么应用程序是特定于操作系统的?
  25. 13:15
    (英语原声)硬件如何在多任务处理中协助软件?
  26. 11:29
    (中文配音)硬件如何在多任务处理中协助软件?
  27. 20:34
    链表的一个实际应用
  28. 45:02
    让你的电脑运行更流畅的奇妙算法
  29. 43:38
    (流畅中文配音)让你的电脑运行更流畅的奇妙算法
  30. 19:41
    (原声双语字幕)当程序调用 sleep() 时会发生什么?
  31. 17:57
    (流畅中文配音)当程序调用 sleep() 时会发生什么?
  32. 20:40
    这个简单算法驱动了真正的解释器:Pratt Parsing
  33. 18:19
    (双语字幕)编程中最难以捉摸的Bug:竞态条件
  34. 19:23
    (流畅中文配音)编程中最难以捉摸的Bug:竞态条件
  35. 16:02
    (中文配音)阻止内存攻击的底层电路
  36. 14:51
    (英语原声)阻止内存攻击的底层电路
  37. 18:04
    为什么有些项目会使用多种编程语言?
  38. 19:32
    为什么有些项目会使用多种编程语言?
  39. 17:15
    别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
  40. 19:23
    别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
  41. 19:05
    80 年代避免竞态条件的算法(以及它为何失败)
  42. 19:43
    80 年代避免竞态条件的算法(以及它为何失败)
  43. 22:10
    CPU如何与众多不同设备交互?
  44. 23:52
    (中文配音)CPU如何与众多不同设备交互?
  45. 14:04
    (中文配音)你每天都在用的奇特CPU操作
  46. 13:04
    你每天都在用的奇特CPU操作
  47. 18:04
    (中文配音)历史如何塑造了我们今天仍在使用的编程术语?
  48. 17:42
    (英语原声)历史如何塑造了我们今天仍在使用的编程术语?
  49. 16:41
    为什么有些底层项目里会充满这种奇怪的代码?
  50. 16:39
    (中文配音)为什么有些底层项目里会充满这种奇怪的代码?
  51. 21:35
    编译与解释代码如何共处同一程序中?
  52. 21:30
    (英语原声)编译与解释代码如何共处同一程序中?
  53. 17:09
    【双语字幕】Core Dumped 常见问题的集中回答
  54. 13:36
    【双语字幕】90年代的设计决策阻碍了Python并行化
  55. 12:01
    【中文配音】90年代的设计决策阻碍了Python并行化
  56. 17:51
    Linux创建进程的奇怪方式
  57. 18:14
    【中文配音】Linux创建进程的奇怪方式
  58. 19:49
    CPU如何运行函数?
  59. 19:38
    【中文配音】CPU如何运行函数?
  60. 17:15
    没有人解释的问题:内核的边界在哪里?
  61. 19:36
    【英语原声】没有人解释的问题:内核的边界在哪里?
  62. 35:49
    硬件如何让线程问题不再那么棘手?
  63. 19:47
    为什么在macOS、Windows和Linux上安装应用程序如此不同?
  64. 24:00
    游戏公司真的能破坏你的电脑吗?
  65. 10:43
    一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
  66. 14:45
    CPU如何执行有符号和无符号运算?
  67. 19:11
    简单指令, 奇妙算法
  68. 9:26
    当CPU遇到它不认识的指令,会发生什么?😱【底层原理】

Parts

  1. P1 · 中文配音
  2. P2 · 英语原声
Description
https://www.youtube.com/watch?v=_61YOh7QcP0
### 文本总结:
乔治在YouTube频道“Core Dumped”中分享了他大学时期参与的一个项目,该项目涉及开发一款能够记录按下录制按钮前10秒视频的应用程序。他详细讨论了使用数组和链表来处理帧缓冲区的优缺点,特别是在处理大量内存数据时,链表的优势在于高效地删除旧帧和插入新帧,而数组则因需要频繁移动数据而效率较低。乔治还提到,尽管链表在缓存优化方面不如数组,但在处理大内存块时,链表的性能更优。最终,他选择使用链表来实现帧缓冲区,并解释了该应用程序在交通监控中的潜在应用。尽管项目未能商业化,但收集的数据对训练机器学习模型非常有价值。

- **项目开发**  
- **内存优化**  
- **链表 vs 数组**  
- **内存优化**  
- **交通监控应用**  
- **机器学习数据**  
- **缓存机制**  
- **硬件性能优化**  
- **视频录制技术**  
- **大学研究项目**

Comments

暂时不想取名字啊 2025-03-01

看了一堆解释,没说到位。 为什么要用链表? 因为每帧生成的大小不是固定的。 为什么帧的大小不是固定的? 因为除了关键帧之外,其他的帧都可以压缩,以节省内存。 如果大小固定,可以采用循环数组。 Array( index % len ); 上面up主提到的模型 链表的连接,也可以看作是连续的 只是下标不固定。我们不能通过1加1减来计算下一个下标。 但如果,写的代码很糟糕,它在录像的同时,有各种计算和申请释放内存操作(当我没说)

♥ 29 ↩ 32

榭寄生之剑 2025-03-01

为啥不用RingBuffer呢?

♥ 11 ↩ 11

泡面蟹 2025-03-05

[笑哭]看了半天只能理解为作者水平太低。 1. Page swap肯定不会因为你用哪个模式就突然增加/减少了。因为总的热数据量是一定的。 2. Ring buffer+定长缓冲区在该用例下其实显著优于使用链表,但是这个作者恐怕用了一些比较离谱的用法(例如每次帧生成时重新申请内存),导致了ringbuf会产生内存交换。

♥ 7 ↩ 1

樱花莎 2025-03-01

array list(vector)感觉在中文还是翻译成动态数组更好

♥ 6 ↩ 4

摆烂的小lon包 2025-03-02

机番就把原文放出来

♥ 5 ↩ 1

SY_MoYanQwQ 2025-03-01

为什么要说不会录制恐龙呢...有点好奇()[兔年]

♥ 4 ↩ 3

幽州狼 2025-03-22

实际上链表一个显著应用是jitter buffer。这个是只能用链表做的。它是按帧存储这种数据包的容器。在网络上传输时候会颠三倒四,收到后需要在缓冲区重排。这个重排决定了不能是连续内存。链表加Freelist就形成了jitter buffer

♥ 3

Maxwell_Neumann 2025-03-01

要想使用连续存储的话,也可以考虑循环缓冲区,溢出时用新数据直接替换掉最旧的数据,只需移动指针而减少了链表的内存分配和释放

♥ 2 ↩ 1

-MIKA_7 2025-04-04

用链表是看缓存和操作特性的。首先,图像内存比缓存大,缓存不起效果,此时对缓存而言链表和数组都不好用;其次,作者将图像等待生成时的组织看作队列,这个队列总需要从一端读取数据,从另一端写入数据,这些操作在链表中实现代价小,在数组中实现代价大,所以用列表

♥ 1

HUHUAMAOMAO 2025-03-01

数组

♥ 1

离子云 2025-03-02

链表的每个节点本身是图片本身吗?如果不是那么用链表和缓冲区不都一样存储的是指向图片的引用?

♥ 1

莫名大大大大滴滴滴 2025-03-28

loopbuf

御坂13288号 2025-03-04

在加上一点,每一帧的大小也足够大。大到能吃干净CPU缓存,所以链表导致的缓存失效问题可以忽略,应为数组也会失效。

敬域 2025-03-01

这不就是switch上的录像功能吗,steam也有类似的实现。但是放在车载录像的话有点多余了,车载一般都是持续录制,腾出手来按录像是个下策。

↩ 1