Rust 向量 (`Vec`) 与数组 (`[T; n]`) 的性能 [关闭]

2024-01-08

在 Rust 中使用向量与数组相比,性能损失了多少?

我所说的性能是指:元素访问的速度或迭代的速度。


它们都将数据存储在线性连续数组中,其中访问或迭代都是 O(1) 操作,因此性能没有差异。向量较慢的唯一情况可能是对于一些小列表,因为数组存储在当前堆栈帧的堆栈上,因此它们的数据很可能已经加载到 CPU 缓存中。 Vector OTOH 将数据存储在堆上,因此在首次访问数据之前,数据在缓存中不可用

Vector 还具有多级重定向,因为您需要首先加载数组的地址,因此第一次内存访问可能也会较慢,但这可以忽略不计

另一次,向量更糟糕的是当您使用向量向量与多维数组时,因为每个向量都是单独分配的并且位于内存周围,这不利于缓存。看vec 与数组的访问时间 https://www.reddit.com/r/rust/comments/3bu7a8/access_time_of_vec_vs_array/

也可以看看数组与 vec 在内存和 CPU 使用方面的差异 https://users.rust-lang.org/t/difference-between-array-vs-vec-for-memory-and-cpu-usage/23710/2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 向量 (`Vec`) 与数组 (`[T; n]`) 的性能 [关闭] 的相关文章

  • Java:如何读取一个 int 的多个扫描仪值

    我一直在试图弄清楚如何根据从获得的输入来计算面积和体积Scanner班级 该练习包括一次接收多对半径和高度 我已经编写了这些方法并对其进行了测试 所以这些方法应该有效 我遇到的问题是当我想使用 扫描仪 的输入并使用它们进行计算时 这是我的代
  • 数组数据标准化

    我有一个表示强度 黑到白 的值数组 在 1 0 和 1 0 之间 我需要一种方法将双精度值从 1 0 到 1 0 映射到 0 到 255 并返回 更概括地说 我有一个数据数组 我需要将数据的最小值和最大值映射到提供的最小值和最大值 基本结构
  • 给定一个零索引数组 & 该数组的平衡索引[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给出一个由 N 个整数组成的零索引数组 A 该数组的平衡索引是任何整数 P 满足 0 P 例如 考虑以下由 N 8 个元素组成的数组
  • 如何在不消耗值的情况下实现添加特征[重复]

    这个问题在这里已经有答案了 当实施Add特质 还有其他一些 比如Mul Sub等 对于一个简单的结构体 必须完全消耗该结构体值 因此它的后续使用是不可能的 同时 内置原语 u8 usize等 实施Add同时允许之后使用它add被称为 我该如
  • 如何将文件中的行读入数组?

    我正在尝试将文件作为行数组读入 然后使用 zsh 对其进行迭代 我得到的代码在大多数情况下都有效 除非输入文件包含某些字符 例如括号 这是它的一个片段 bin zsh LIST cat path to some file txt SIZE
  • 使用排序函数按 NSDates 对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的模型类Event import Foundation import MapKit public class Event let id Int var title String let status
  • 声明 for 循环变量时 &mut 会做什么吗?

    考虑以下 愚蠢的 程序 fn main let mut array mut 1u8 2u8 3u8 for mut value in array 它编译并运行正常 尽管如预期的那样警告未使用的变量 不必要的可变性 但有什么作用 mut做在f
  • 在 ruby​​ 中获取多维数组的维度

    我刚刚开始学习红宝石 现在我需要计算出多维数组的维数 我查看了所有数组方法的 ruby docs 但找不到返回维度的方法 这是一个例子 For 1 2 3 4 5 6 维数应为 2 For 1 2 2 3 3 4 5 维度应为 3 简单的
  • 你能向被劫持的 JavaScript 数组添加一个函数吗?

    这个问题与在 Javascript 中声明数组时应遵循哪些最佳实践 https stackoverflow com q 11500492 508537 假设有一个客户 我们就称他们为客户 D B 库珀 http en wikipedia o
  • 如何在 Rust 中打印没有尾随换行符的输出?

    宏观println Rust 总是在每个输出的末尾留下一个换行符 例如 println Enter the number io stdin read line mut num 给出输出 Enter the number 56 我不需要用户的
  • 定义一个数组,使用枚举变量作为数组大小

    使用枚举变量定义数组作为数组大小意味着什么 例如我有以下代码 typedef enum D ROM RDE GROUP 0 0x0 D ROM RDE GROUP 1 D ROM RDE MAX GROUPS E ROM RDE GROUP
  • 将字符串拆分为字母数组 - 双字符字母 PHP

    我需要将一个字符串拆分为一个字母数组 问题是在我的语言 克罗地亚语 中也有双字符字母 例如 lj nj d 所以字符串如ljubi icajecvijet应该分成一个数组 如下所示 Array 0 gt lj 1 gt u 2 gt b 3
  • 为外国类型实现外国特征[重复]

    这个问题在这里已经有答案了 因此 我认为出于前向兼容性考虑 以防止在库中添加进一步的特征实现破坏使用类型特征的地方 有理由禁止孤立特征实现 并且它可能使编译变得更加困难 但我想知道 Rust 社区认为哪种解决方法是最理想的 以防万一这还不够
  • Python:在任意维度中使用冒号运算符对数组进行索引

    我有一个 numpy nd 数组 我的任务的简化版本是沿着每个轴获取一个向量 为了显示 import numpy x numpy array range 24 reshape 2 3 4 x0 x 0 0 x1 x 0 0 x2 x 0 0
  • 计算复杂数组的abs()值的最快方法

    我想计算 C 或 C 中复杂数组元素的绝对值 最简单的方法是 for int i 0 i lt N i b i cabs a i 但对于大向量来说 速度会很慢 有没有办法加快速度 例如使用并行化 语言可以是 C 或 C 鉴于所有循环迭代都是
  • javascript Array.prototype.push 如何连接

    我已经看到数组的 push 方法用于替换串联 但我不完全确定它是如何工作的 var a 1 2 3 var b 4 5 6 Array prototype push apply a b 它如何就地连接而不是返回一个新数组 apply htt
  • JavaScript:String 和 Array 上的 indexOf 方法的效率差异

    我很好奇效率是否存在差异indexOf两者都可用的方法Array and String在 JavaScript 中 我以为indexOf在 String 上的效率低于在 Array 上的效率 而我的new测试结果支持了这一点 例如 var
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • Javascript:如何过滤对象数组并对结果求和

    我有一个对象数组 var example a 1 b 2 c 3 a 4 b 5 c 6 a 7 b 8 c 9 我正在尝试添加所有不对应的值c 我已经设法用 console log test filter x gt x c gt 3 过滤
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问

随机推荐

  • C++14 中标准布局类的定义

    A 标准布局class 在 C 14 中的 class 7 中定义 如下 重点是我的 A 标准布局class 是一个类 7 1 没有非标准布局类型的非静态数据成员 类 或此类类型的数组 或引用 7 2 没有虚函数 10 3 也没有虚基类 1
  • 如何通过google帐户快速检查用户是否已经在firebase中注册

    我想为用户执行一个操作首次登录 注册 使用谷歌帐户和另一个操作 如果用户之前已经登录过 如果某个用户已经并且仍然使用他们的 Google 帐户登录 我们可以使用这行代码 Auth auth addStateDidChangeListener
  • JSON.Net读取错误

    我正在尝试使用 Json Net 解析一些 JSON 数据 这是我的数据 UIDClan 1 UIDKnjiga 1 Naslov Title1 DatumZaKada 2013 08 09 00 00 00 DatumIstekRez n
  • 在Java中访问其他类文件

    我们刚刚开始为我的学位学习 Java 我得到了一个文件夹 其中包含各种 Java 类 每个类都有自己的 java 文件 文件名与其所在类的名称相同 有一个文件托管一个公共类 其中包含以下内容 public static void main
  • 修改不是先前提交的提交[重复]

    这个问题在这里已经有答案了 我经常会有如下的工作流程 提交对一组文件的更改 将更改提交到不同的文件组 意识到我错过了一些属于第一次提交的更改 Curse 我无法利用git commit amend因为这不是我需要更改的最新提交 将更改添加到
  • 修复了推回内容的元素

    我正在寻找一种在页面顶部有一个固定元素的方法 该元素会根据页面宽度改变高度 并且还会推回下面的内容 到目前为止我已经解决了一些问题 但我希望有一个更干净的解决方案 我所做的是让两个顶部元素具有相同的内容 一个设置为固定位置 另一个设置为相对
  • 在加载时无需事件即可将数据从子级传递到父级,这在 vue 世界中可能吗?

    我觉得如果没有 click 事件或事件或输入字段或某些需要交互的东西 则不可能将数据从子级传递到父级 只需在加载时通 过使用此数据中的变量和控制将数据从子级数据变量传递到另一个数据变量中的父级父变量 只是加载时 可能吗 将 JSON 数据从
  • 表达式树的后缀表示法

    关于如何将表达式树转换为后缀表示法 有足够的资源 而且并不难 但我必须将后缀表达式解析为表达式树 表达式为 A 2 2 A B B 2 A B 我真的不知道如何解释这个表达式 有人知道如何处理这个问题吗 创建一个包含可能是树一部分的节点的堆
  • 拦截windows打开的文件

    我正在尝试制作一个可以拦截文件打开过程的小程序 目的是当用户双击给定文件夹中的文件时 Windows会向软件发出通知 然后软件处理该请求并将文件的数据返回给Windows 也许还有另一种解决方案 例如监视 Open 消息并强制 Window
  • Android Studio -- 无法编辑文件

    我认为这是一个非常愚蠢的问题 而且我找不到任何其他类似的问题 所以我认为它真的很愚蠢 但它仍然让我发疯 我无法弄清楚这一点 因此 每次我在 Android Studio 中打开文件时 它都不会让我编辑它 就像它处于某种只读或选择模式或其他模
  • Python 列表和 foreach 访问(在内置列表中查找/替换)

    我原本以为Python是一种纯粹的引用传递语言 来自 C C 的我忍不住会想到内存管理 而且很难将它从我的脑海中抹去 因此 我尝试从 Java 的角度来考虑它 并将除原语之外的所有内容都视为按引用传递 问题 我有一个列表 其中包含一堆用户定
  • Dictionary.values() 列表与集合中查找的时间复杂度[重复]

    这个问题在这里已经有答案了 在Python中 我们知道在字典中查找键需要O 1 运行时间 但是在dictionary values 中查找的运行时间是多少 dictionary a 66 77 88 b 99 100 key a if ke
  • Three.js DoubleSided 材质不会在平面参数几何体的两侧投射阴影

    看看这个jsfiddle http jsfiddle net blwoodley 5Tr4D 1 http jsfiddle net blwoodley 5Tr4D 1 我有一个蓝色聚光灯 照射在旋转的旋转正方形上 这会给地下地面投射阴影
  • 将身高设置为 100%

    我需要将所有网页 主页除外 的正文位于http www zorglegal nl http www zorglegal nl到相同的高度 100 浏览器高度 因此右侧的棕色条从上到下全屏拉伸 我怎样才能最好地实现这一目标 html heig
  • 在 tkinter 循环中不断访问线程

    我正在尝试制作一个 GUI 来连续绘制从微处理器接收到的信号 我试图仅通过使用类来实现这一点 但失败了 因为只有 GUI 类是 oppend 的 现在我已经实现了线程 或者至少我认为我已经实现了 但每个线程只运行一次 这让我相信我不明白 t
  • 类中具有相同变量名的多重继承

    我无意中遇到了多重继承中使用的类中具有相同名称的成员变量的问题 我的基本想法是成员变量是简单的 合并 即发生多重声明 编译器甚至没有告诉我警告 请参阅下面的 MWE 我知道使用相同名称的变量是一个坏主意 所以我认为以我的方式引用它们至少是不
  • ASP.net MVC 导航栏品牌到标题文本颜色

    令人惊讶的是 要找到这个问题的答案并不容易 我想更改标题中所有操作链接的文本颜色 我试过这段代码 CSS navbar brand color black navbar brand visited color black navbar de
  • 如何在 GAE 之上运行 WebSocket 服务器?

    如何在 Google App Engine 上运行 WebSocket 服务器 是否可以 有可能吗 是否可以 No 您现在不能 因为 GAE 不允许通用入站套接字连接 每个请求也被限制为 30 秒 但这可以通过自动重新连接和会话跟踪轻松解决
  • 我可以用类定义覆盖 #id ul li 行为吗

    我有一个由 id 标识的区域 并且有一个 CSS 如下所示 id ul li margin 0 对于该区域的特定 UL 我可以覆盖边距设置吗 据我所知 id 在评估格式方面具有非常高的优先级 我努力了 myclass ul li margi
  • Rust 向量 (`Vec`) 与数组 (`[T; n]`) 的性能 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 在 Rust 中使用向量与数组相比 性能损失了多少 我所说的性能是指 元素访问的速度或迭代的速度 它们都将数据存储在线性连续数组中