【问题标题】:Speed of changing memory addresses [closed]更改内存地址的速度[关闭]
【发布时间】:2014-11-01 18:07:44
【问题描述】:

我想解释这个问题的最好方法是遍历链表和数组。

给定一个大小为 n 的数组和链表,纯粹基于移动到不同内存地址所需的时间,遍历数组会比遍历链表更快。由于数组是一个连续的内存块,而链表包含指向内存中其他位置的指针,那么数组会更快吗?如果内存足够大,速度会不会有明显差异?

感谢您的任何意见!

【问题讨论】:

标签: performance memory


【解决方案1】:

数组会更快。这样想,对于链表,您需要找到元素 i,您需要 查看每个节点 并找到指向下一个元素的指针。而对于一个数组,我们只需要在内存中移动(基于数据类型),大多数情况下,大多数 CPU 的移动是一个快速操作,比查看指针并移动到它的位置更快。

同样更重要的是,对于一个数组,可以并行找到下一个元素,我们不需要知道 i-1 是什么来找到元素 i .但是对于链表,您需要知道最后一个元素才能找到下一个元素。当你遍历一个数组时(如果你有一个很好的缓存内存)它可以将下一个元素移动到缓存中以便更快地访问。主要用于迭代缓存很可能被存储和使用。对于链表,您也无法预测下一个要放入高速缓存的项目,因为它可能是随机的。

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 2015-08-22
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2013-06-24
    相关资源
    最近更新 更多