스택 오버플로에서 여러 답변을 탐색 한 후 일부 네이티브 컴파일 언어에는 가비지 수집이 있음이 분명합니다 . 그러나 이것이 정확히 어떻게 작동하는지는 분명하지 않습니다.
가비지 수집이 해석 언어와 어떻게 작동하는지 이해합니다. 가비지 콜렉터는 단순히 인터프리터와 함께 실행되며 사용되지 않고 도달 할 수없는 객체를 프로그램 메모리에서 삭제합니다. 그들은 둘 다 함께 달리고 있습니다.
그래도 컴파일 된 언어와 어떻게 작동합니까? 컴파일러가 일단 소스 코드를 대상 코드, 특히 기본 머신 코드로 컴파일하면 완료됩니다. 작업이 끝났습니다. 그렇다면 컴파일 된 프로그램은 어떻게 가비지 수집 될 수 있습니까?
"쓰레기"객체를 삭제하기 위해 프로그램이 실행되는 동안 컴파일러가 CPU와 작동합니까? 또는 컴파일러가 컴파일 된 프로그램의 실행 파일에 최소 가비지 수집기를 포함합니까?
나는 스택 오버플로에 대한이 답변에서 발췌 한이 때문에 후자의 진술이 전자보다 더 타당하다고 생각합니다 .
그러한 프로그래밍 언어 중 하나는 에펠입니다. 대부분의 Eiffel 컴파일러는 이식성의 이유로 C 코드를 생성합니다. 이 C 코드는 표준 C 컴파일러에서 기계 코드를 생성하는 데 사용됩니다. Eiffel 구현은이 컴파일 된 코드에 대해 GC (때로는 정확한 GC)를 제공하며 VM이 필요하지 않습니다. 특히 VisualEiffel 컴파일러는 완전한 GC 지원을 통해 네이티브 x86 머신 코드를 직접 생성했습니다 .
마지막 문장은 컴파일러가 프로그램이 실행되는 동안 가비지 수집기 역할을하는 최종 실행 파일에 일부 프로그램을 포함하고 있음을 나타냅니다.
D 언어 웹 사이트의 가비지 수집에 관한 페이지 는 기본적으로 컴파일되고 선택적인 가비지 수집기가 있습니다. 또한 일부 백그라운드 프로그램이 가비지 수집을 구현하기 위해 원래 실행 프로그램과 함께 실행된다는 것을 암시하는 것 같습니다.
D는 가비지 수집을 지원하는 시스템 프로그래밍 언어입니다. 일반적으로 메모리를 명시 적으로 비울 필요는 없습니다. 필요에 따라 할당 하면 가비지 수집기가 사용하지 않는 모든 메모리를 주기적으로 사용 가능한 메모리 풀로 반환합니다.
이 방법은 위에서 언급 한 경우 입니다 사용 방법을 정확히 작동까요? 컴파일러는 가비지 수집 프로그램의 복사본을 저장하고 생성 한 각 실행 파일에 붙여 넣습니까?
아니면 내 생각에 결함이 있습니까? 그렇다면 컴파일 된 언어에 대한 가비지 수집을 구현하는 데 어떤 방법이 사용되며 어떻게 작동합니까?
malloc()
.