답변:
GC는 일반적으로 힙에 할당 된 메모리에 적용됩니다. 나는 Forth 나 RPL에 익숙하지 않지만 힙이없고 모든 것이 전역 스택에 저장되면 GC가 할 일이 없습니다.
네 말이 맞아. 그러나 스택 기반은 전체 스토리의 일부일뿐입니다. 예를 들어, Java 바이트 코드 인터프리터는 스택 기반입니다 (컴파일 된 코드는 효율성상의 이유로 다르게 작동합니다). 이것은 모든 언어가 스택 언어로 변환 될 수 있음을 알려줍니다.
중요한 것은 스택 외부의 객체, 현재 메소드 실행보다 오래 지속될 수있는 객체입니다. 한 언어가 같은 아무 상관이 없기 때문에 malloc
나 new
, 거기에 그러한 물체도 당신은 아무 필요 delete
도 GC.
동적 메모리 할당이없는 언어는 그 유용성에있어 상당히 제한적입니다.
언어에서 스택 할당 대신 정적 할당을 사용하는 경우 가비지 수집이 필요하지 않습니다. 예를 들어, -s (정적 스토리지) 옵션을 사용하는 Fortran 77 은 프로그램이 시작될 때 모든 메모리를 할당하므로 런타임시 메모리 할당이 해제되지 않습니다. 약간의 훈련이 필요하지만 정적 메모리 할당을 사용하는 시뮬레이션, 특히 시뮬레이션을 작성할 수 있습니다. 정적 할당은 메모리 누수를 제거하고 컴파일러가 정적 분석을 사용하여 캐시에로드 할 항목을 결정할 수 있기 때문에 캐시 성능을 크게 향상시킵니다.