rust 为什么打印到控制台是一个瓶颈?

pbpqsu0x  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(288)

Rust High Performance的第27页,作者写道:
问题是,例如,如果您试图打印一个整数,就会出现瓶颈。这就是不久前罗伯特·格罗斯的遭遇,他写了一篇关于这件事的文章。长话短说,他不得不强行复制整数。他是怎么做到的?好吧,这就像创建一个将返回该整数的作用域一样简单。由于整数实现了Copy,因此整数将被复制到作用域,然后返回,实际上是将其复制到宏:let my_int = 76_u32; println!("{}", {my_int});
为什么作者声称打印整数是瓶颈?以至于它甚至导致了一种变通方法,即创建一个新的作用域,其唯一目的是复制传入的整数?
我搜索了Robert Grosse,但找不到上面提到的文章。

jfgube3f

jfgube3f1#

这篇文章的名字是how copying an int made my code 11 times faster by Robert Grosse
问题显然是以下内容(在页面的三分之一处详细说明):
而Rust知道borrow是不可变的[nb:println!总是隐式地借用它的参数],遗憾的是,这个信息没有传递给LLVM。这意味着LLVM优化器看到指向size的指针被传递给某个函数,然后放弃,留下下面的代码来假设size持有任意值。
然后罗伯特展示了集会,这澄清了一些事情:不是println!瓶颈代码,而是println!导致优化失败(或去优化):LLVM假设println!可能会在&size上保留一个句柄,因此在每次迭代中,它必须重新加载大小,执行模运算,并执行边界检查。

相关问题