static lifetime
https://doc.rust-lang.org/rust-by-example/scope/lifetime/static_lifetime.html
'static
키워드가 붙은 레퍼런스는 레퍼런스가 가리키는 값이 런타임동안 살아있다는 것을 뜻한다. (전역변수?) 바이너리에 read-only 영역에 보관된다고 한다. (elf 파일 기준 .text
영역에 보관된다는 소리겠지?)
- Make a constant with the
static
declaration - Make a
string
literal which has type:&'static str
.
// Make a constant with 'static lifetime
static NUM: i32 = 18;
// Returns a reference to NUM where its 'static
// lifetime is coerced to that of the input argument
fn coerce_static<'a>(_: &'a i32) -> &'a i32 {
&NUM
}
fn main() {
{
// Make a string literal and print it:
let static_string = "I'm in read-only memory";
println!("static_string: {}", static_string);
// When static_string goes out of scope, the reference
// can no longer be used, but the data remains in the
// binary.
}
{
// Make an integer to use for corece_static:
let lifetime_num = 9;
// Coerce NUM to lifetime of lifetime_num
let coerced_static = coerce_static(&lifetime_num);
println!("coerced_static: {}". coerced_static);
}
println!("NUM: {} stays accessible!", NUM);
}
'
이렇게 single quote 하나만 앞에 찍혀있는 건 타입이 아니라 라이프타임이었나보다. 그래서 coerce 코드를 보면 어떤 제네릭 변수가 있을때 이 변수의 라이프타임을 NUM
에게 강제하겠다는 뜻처럼 보인다.