13.4.7 static
'static' 생명주기는 가능한 가장 긴 생명주기이고 실행되는 프로그램의 마지막 생명주기이다.
'static생명주기도 더 짧은 생명주기로 강제될 수 있다. 변수를
'static` 생명주기로 만드는 데는 두 가지 방법이 있고, 둘 모두 바이너리의 읽기-전용 메모리에 저장된다.
static
선언과 함께 상수를 만든다.&'static str
타입으로string
리터럴을 만든다.
다음 예제를 통해 각 방법을 살펴보자:
// `'static` 생명주기로 상수를 만든다. static NUM: i32 = 18; // `'static`인 `NUM`의 참조를 반환한다. // 생명주기는 입력 인자로 강제된다. fn coerce_static<'a>(_: &'a i32) -> &'a i32 { &NUM } fn main() { { // `string` 리터럴을 만들고 출력한다: let static_string = "I'm in read-only memory"; println!("static_string: {}", static_string); // `static_string`이 범위에서 벗어나면, // 참조는 더 이상 사용될 수 없지만 데이터는 바이너리에 남아있다. } { // `coerce_static`에 사용할 정수 생성. let lifetime_num = 9; // `NUM`을 `lifetime_num`의 생명주기로 강제한다: let coerced_static = coerce_static(&lifetime_num); println!("coerced_static: {}", coerced_static); } println!("NUM: {} stays accessible!", NUM); }