RS.CLIPPY.LARGE_TYPES_PASSED_BY_VALUE
Functions taking large arguments by value
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: large_types_passed_by_value. Copyright ©2025 The Rust Team. All rights reserved.
What it does
Checks for functions taking arguments by value, where
the argument type is Copy and large enough to be worth considering
passing by reference. Does not trigger if the function is being exported,
because that might induce API breakage, if the parameter is declared as mutable,
or if the argument is a self.
Why is this bad?
Arguments passed by value might result in an unnecessary
shallow copy, taking up more space in the stack and requiring a call to
memcpy, which can be expensive.
Example
#[derive(Clone, Copy)]
struct TooLarge([u8; 2048]);
fn foo(v: TooLarge) {}
Use instead:
fn foo(v: &TooLarge) {}
Configuration
-
avoid-breaking-exported-api: Suppress lints whenever the suggested change would cause breakage for other crates.(default:
true) -
pass-by-value-size-limit: The minimum size (in bytes) to consider a type for passing by reference instead of by value.(default:
256)