2012-01-01 7 views
6

레지스터 기반 가상 시스템이 스택 기반 가상 시스템보다 나은 이유는 무엇입니까?레지스터 기반 가상 시스템이 스택 기반 가상 시스템보다 나은 이유는 무엇입니까?

특히, the Parrot VM's document에, 설계자가 레지스터 머신의 장점을 설명

: 높은 수준의 언어로 많은 프로그램이 어휘 변수 가끔, 중첩 된 함수 및 방법 호출 구성

[...] 개최를 중간 결과. 비 JIT 설정에서는 스택 기반 VM이 터지면서 동일한 피연산자를 여러 번 푸시하는 반면 레지스터 기반 VM은 적절한 양의 레지스터를 할당하고 연산을 수행하여 작업량을 크게 줄일 수 있습니다 및 CPU 시간.

왜 동일한 피연산자가 여러 번 푸시 되었습니까?

+0

가능한 중복 http://stackoverflow.com/questions/164143/registers- 대 스택) –

답변

7

언어 디자인, 컴파일 또는 최적화없이 바이트 코드별로 바이트 코드로 설명 된 코드를 실행하는 VM을 설명하는 것처럼 보입니다. 이 경우 사실입니다. 코드 예를 들어이 같은 일을 생각해 : (레지스터 인수를 전달하는 데 사용할 수있는 경우) 레지스터 기반 시스템으로

x = first(a,b,c) 
y = second(a,b,c) 
third(y,x) 

, 당신은 단순히 예상하고 어떤 위치에 인수를 넣을 수 있습니다. 모든 레지스터가 함수가 아닌 전역 변수 인 경우 (또는 적어도 호출 스택을 팝 할 때 복원 된 경우) firstsecond 사이의 호출 사이에 아무 것도 수행하지 않아도됩니다. 당신은 스택 기반의 VM이있는 경우, 같은과

끝장 (희망 당신은 swap을해야합니까) : 또한

push a 
push b 
push c 
call first 
push a # pushing same arguments again 
push b 
push c 
call second 
swap 
call third 

을 동일한 변수를 재사용 수학 식을 계산하는 경우, 당신은 이런 식으로 뭔가를 할 필요가 있습니다 대신

push a 
push b 
add 
push a 
push c 
add 
add 

을 (가정이 레지스터는 A, B, C, 그리고 당신이 B의 내용을 파괴 할 수 및 c) :

add b, a 
add c, a 
add b, C# result in b 

이렇게하면 첫 번째 경우를 별도로 수행해야하는 a의 복원을 피할 수 있습니다. 다시 그런

, 난 그냥 예를 추측하고있어, 어쩌면 그들이 다른 경우를 의미 ... [스택 대 레지스터 (의