언어 디자인, 컴파일 또는 최적화없이 바이트 코드별로 바이트 코드로 설명 된 코드를 실행하는 VM을 설명하는 것처럼 보입니다. 이 경우 사실입니다. 코드 예를 들어이 같은 일을 생각해 : (레지스터 인수를 전달하는 데 사용할 수있는 경우) 레지스터 기반 시스템으로
x = first(a,b,c)
y = second(a,b,c)
third(y,x)
, 당신은 단순히 예상하고 어떤 위치에 인수를 넣을 수 있습니다. 모든 레지스터가 함수가 아닌 전역 변수 인 경우 (또는 적어도 호출 스택을 팝 할 때 복원 된 경우) first
과 second
사이의 호출 사이에 아무 것도 수행하지 않아도됩니다. 당신은 스택 기반의 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
의 복원을 피할 수 있습니다. 다시 그런
, 난 그냥 예를 추측하고있어, 어쩌면 그들이 다른 경우를 의미 ... [스택 대 레지스터 (의
가능한 중복 http://stackoverflow.com/questions/164143/registers- 대 스택) –