G.FUD.02 当函数参数实现了 Copy,并且是按值传入,如果值可能会太大,则宜考虑按引用传递

【级别】 建议

【描述】

通过值传递的参数可能会导致不必要的 memcpy 拷贝,这可能会造成性能损失。

【反例】


#![allow(unused)]
#![warn(clippy::large_types_passed_by_value)]

fn main() {
#[derive(Clone, Copy)]
struct TooLarge([u8; 2048]);

// 不符合
fn foo(v: TooLarge) {}
}

【正例】


#![allow(unused)]
#![warn(clippy::large_types_passed_by_value)]

fn main() {
#[derive(Clone, Copy)]
struct TooLarge([u8; 2048]);

// 符合
fn foo(v: &TooLarge) {}
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
large_types_passed_by_valueyesnopedanticallow

该 lint 对应 clippy.toml 配置项:

# 如果函数是被导出的 API,则该 lint 不会被触发,是防止 lint 建议对 API 有破坏性的改变。默认为 true
avoid-breaking-exported-api=true