메모리 (및 리소스 잠금)는 프로그램 실행 중 결정적인 지점에서 OS로 반환됩니다. 프로그램 자체의 제어 흐름은 주어진 리소스를 할당 해제 할 수있는 위치를 알기에 충분합니다. 인간 프로그래머가 fclose(file)
프로그램을 수행 할 때 작성 위치를 알고있는 것처럼.
GC는 제어 흐름이 실행될 때 런타임 중에 직접 파악하여이 문제를 해결합니다. 그러나 제어 흐름에 대한 진실의 근원은 근원입니다. 따라서 이론적으로 free()
소스 (또는 AST)를 분석하여 컴파일 전에 호출 을 삽입 할 위치를 결정할 수 있어야합니다 .
레퍼런스 카운팅은이를 구현하는 확실한 방법이지만, 포인터가 여전히 참조 (아직 범위 내)이지만 더 이상 필요하지 않은 상황이 발생하기 쉽습니다. 이것은 포인터를 수동으로 할당 해제하는 책임을 해당 포인터에 대한 범위 / 참조를 수동으로 관리하는 책임으로 변환합니다.
프로그램 소스를 읽을 수있는 프로그램을 작성하는 것이 가능해 보입니다.
- 프로그램 제어 흐름의 모든 순열을 예측하여 프로그램의 실시간 실행을 보는 것과 유사한 정확도
- 할당 된 자원에 대한 모든 참조를 추적
- 각 참조에 대해 참조가 절대 역 참조되지 않는 가장 빠른 지점을 찾기 위해 전체 후속 제어 흐름을 통과합니다.
- 이 시점에서 해당 소스 코드 줄에 할당 해제 문을 삽입하십시오.
이 작업을 이미 수행하고있는 것이 있습니까? Rust 또는 C ++ 스마트 포인터 / RAII가 같은 것이라고 생각하지 않습니다.