gpt4 book ai didi

performance - repeat(x).take(n) 性能好吗?

转载 作者:行者123 更新时间:2023-11-29 07:47:03 26 4
gpt4 key购买 nike

我正在寻找一种有效的方法来编写以下函数,如 another question 中所讨论的那样:

fn dots(n: usize) -> String {
std::iter::repeat('.').take(n).collect()
}

Rust 是否为通用结构类型的实例生成具体类型?是 repeat('.').take(n) 的结果(结构 Take<Repeat<char>> )等同于

struct Take_Repeat_char {
element: char,
n: usize
}

方法实现是否内联 - 会有 Take::next() 的版本吗?有 Repeat::next()内联在里面?

自己检查这个的好方法是什么?检查 LLVM IR?

最佳答案

是的,这已经足够 Rusty™ 了。是的,如果您使用优化进行编译(例如 cargo build --release),LLVM 将内联整个内容。通过 play.rust-lang.org 查看并查看生成的程序集。有问题的代码是:

movb    $46, (%rax)
movb $46, 1(%rax)
movb $46, 2(%rax)
movb $46, 3(%rax)
movb $46, 4(%rax)

五个点。我相信将前四个点合并为一个可能会更快

movd    $x2e2e2e2e, (%rax)

说明,但我认为这不会有太大的不同。编辑:实际上取决于内存对齐,它可能更快 更慢:如果 %rax 对齐,它可能会更快一点(取决于缓存等复杂的东西,预取等),否则它可能会变慢(因为可能存在陷阱)。

关于performance - repeat(x).take(n) 性能好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com