스택 기반 언어로 가비지 수집이 필요합니까?


16

스택 기반 언어로 가비지 수집 (GC)이 필요합니까? Forth 또는 RPL 과 같은 언어 ( HP 계산기 )에서는 가비지 수집이 필요합니까?

출력이 스택에서 튀어 나오므로 필요가 없을 것이라고 생각합니다. 뭔가 빠졌습니까?

답변:


14

GC는 일반적으로 힙에 할당 된 메모리에 적용됩니다. 나는 Forth 나 RPL에 익숙하지 않지만 힙이없고 모든 것이 전역 스택에 저장되면 GC가 할 일이 없습니다.


2
초기에 읽었던 Forth 프로그램의 일반적인 메모리 사용 패턴은 사전 정렬 된 정적 전역 데이터 주소를 사용한다는 점에서 어셈블리 프로그램과 비슷했습니다. 이는 Forth가 스택과 특정 주소간에 데이터를 전송할 수있는 기능이 있기 때문에 작동합니다. 또한 주소를 계산할 수 있습니다. 따라서 힙 개념을 기반으로 할당 자 라이브러리를 작성할 수 있으며 할당 자 라이브러리는 힙의 유한 크기를 처리 할 방법이 필요합니다. Forth 사용자가이 경로를 따라 가면 GC를 원하고 구현할 수 있습니다.
카디프 우주 남자

13

네 말이 맞아. 그러나 스택 기반은 전체 스토리의 일부일뿐입니다. 예를 들어, Java 바이트 코드 인터프리터는 스택 기반입니다 (컴파일 된 코드는 효율성상의 이유로 다르게 작동합니다). 이것은 모든 언어가 스택 언어로 변환 될 수 있음을 알려줍니다.

중요한 것은 스택 외부의 객체, 현재 메소드 실행보다 오래 지속될 수있는 객체입니다. 한 언어가 같은 아무 상관이 없기 때문에 mallocnew, 거기에 그러한 물체도 당신은 아무 필요 delete도 GC.

동적 메모리 할당이없는 언어는 그 유용성에있어 상당히 제한적입니다.


마지막 줄에 동의하지 않으면 Java 바이트 코드가 유용하지 않습니까?
jk.

@ jk., java 바이트 코드에는 동적 메모리 할당이 있습니다.
피터 테일러

1
실제로 스택 기반의 몇 가지 범용 언어가 있습니다. factorcode.org
Yam

1
실제로 요인은 가비지 수집입니다.
Andrea

1

언어가 본질적으로 동적 데이터 구조를 지원할 경우 가비지 콜렉션이 필요합니다. C 수준을 넘어서서 무언가를하고 싶다면 거의 필수입니다. 그것 없이는 고정 된 크기의 데이터 구조와 메모리 관리만으로 고착됩니다. 물론 Forth의 오리지널 방식이지만 저수준 시스템 코딩 만 수행하지 않는 한 오늘날에는 원하지 않을 것입니다.


1

언어에서 스택 할당 대신 정적 할당을 사용하는 경우 가비지 수집이 필요하지 않습니다. 예를 들어, -s (정적 스토리지) 옵션을 사용하는 Fortran 77 은 프로그램이 시작될 때 모든 메모리를 할당하므로 런타임시 메모리 할당이 해제되지 않습니다. 약간의 훈련이 필요하지만 정적 메모리 할당을 사용하는 시뮬레이션, 특히 시뮬레이션을 작성할 수 있습니다. 정적 할당은 메모리 누수를 제거하고 컴파일러가 정적 분석을 사용하여 캐시에로드 할 항목을 결정할 수 있기 때문에 캐시 성능을 크게 향상시킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.