2015-02-01 5 views
-3

모든 컴퓨터 언어가 실행 진행 상황을 추적하기 위해 스택 데이터 구조를 사용하지 않습니까?컴퓨터 언어가 스택을 사용하지 않습니까?

또는이 데이터 구조를 대부분의 컴퓨터 언어 또는 튜링 기계의 고유 한 특성으로 인해 창 발적 요구 사항으로 사용합니까?

+0

폐업을 피하기 위해 질문을 개선 할 수있는 방법을 알려주십시오. – Ben

+0

"이것은 보편적입니까?"라고 쓰면 무엇을 의미합니까? 더 자세하게 얘기해 주 시겠어요? 어쩌면이 질문은 http://programmers.stackexchange.com/과 관련이 있습니다 – yossico

답변

1

전통적인 "C 스타일"스택에서는 특정 언어 기능을 구현하기가 어렵거나 불가능합니다. 예를 들어 클로저는 이전 활성화 레코드에 대한 포인터가 올바르게 작동해야하고 메모리가 C 스타일 스택에서 자동으로 회수되기 때문에 클로저를 기존 스택으로 쉽게 구현할 수 없습니다. 다른 예로, 생성자와 동시 루틴은 로컬 변수와 상대 오프셋 정보를 저장하기 위해 자체 메모리가 필요하므로 표준 스택 구현을 사용하면 쉽게 구현할 수 없습니다.

희망이 도움이됩니다.

+0

JavaScript는 클로저를 구현하지만 활성화 레코드를 기록하기 위해 스택 데이터 구조를 유지합니다. 스택의 LIFO 동작이 컴퓨터 언어에서 필요로하는 것이고 LIFO가 스택을 정의한다는 것입니까? – Ben

+0

@BenAston 정상적인 함수 호출과 반환이 작동하는 방식은 현재 함수 만 활성화되고, 함수를 호출하면 해당 함수가 일시 중단되고 새 함수가 활성화되므로 함수에서 반환하면 함수가 완전히 종료됩니다. 가장 최근에 호출 된 함수를 노출합니다. 그것은 정확히 스택에서 얻는 동작입니다. 위에서 제시 한 예제는 이러한 제약 조건이 반드시 유지 될 필요는 없다는 것을 보여주기 때문에 C 스타일 모델에서 항상 스택을 사용할 수있는 것은 아닙니다. – templatetypedef