4 ms·
4. Cast to &'static and *. Expert Rust hacker level.
by 0b01 4y ago
4. Cast to &'static and *. Expert Rust hacker level.
- willglynn 4y ago`Box::leak()` gets you a `&'static` at runtime. No raw pointers and no `unsafe`, but also no way to free the memory (because `&'static`). This is a technique I've used in anger: https://github.com/AS207960/xml-serde/pull/8 https://github.com/AS207960/xml-serde/pull/8
- ibotty 4y agoI didn't read the pull request in detail, but won't leaking the fields lead to memory leaks when `xml-serde` is used in a long-running application?
- willglynn 4y agoThis particular situation had to do with `&'static str`s baked into the program repeatedly getting compiled into `Regex`es at runtime. It wasn't possible to precompile these `Regex`es due to `serde` architectural limitations. I chose to cache them at runtime by compiling `&'static str`s once and leaking to make a corresponding `&'static Regex`. This is a "leak" insofar as I can't ever release them, but it's leaking into a global cache, and it's bounded because the input strings can't ever be released either. There was a code path which handles dynamic strings, and that path still allocates and frees regexes after the changeset.