[컴][안드로이드] stack-based vs register-based

stack based / register based
stack based 와 register based 의 차이

JVM 과 DVM 의 차이중의 하나가 stack-based VM 과 register-based VM 이란 차이가 있다고 한다. 그래서 stack-based 와 register-based 의 차이가 무엇인지 살펴보자.

먼저 요약을 하자면, operand(연산할 때 쓰이는 값) 을 register 에 넣고 연산을 하느냐, 아니면 stack 에 넣고 연산을 하느냐의 차이라고 보면 될 듯 하다.

register-based

add 에 대한 x86의 assebler syntax 이다.[ref. 1]
  • add <reg>,<reg>
  • add <reg>,<mem>
  • add <mem>,<reg>
  • add <reg>,<con>
  • add <mem>,<con>
add eax, 10 — EAX ← EAX + 10
이렇게 register 에 operand(연산할 값) 를 넣고 instruction 을 수행하는 것이 register-based 라고 할 수 있다.

stack-based

그런데 jvm 은 stack-based 이다. stack 에 operand 를 넣고 계산하는 방식인 것이다. 아래 코드와 그림을 보면 쉽게 이해할 수 있을 것이다.
iload_0 // push the int in local variable 0
iload_1 // push the int in local variable 1
iadd // pop two ints, add them, push result
istore_2 // pop int, store into local variable 2

예시출처: ref. 2
fig5-10
from : http://www.artima.com/insidejvm/ed2/jvm8.html
보는 것처럼, register 에 operand 를 넣는 것이 아니라 stack 에 operand stack 이라는 부분이 존재하고, 이 부분을 이용해서 연산을 하는 것이다.

좀 더 자세한 설명을 보고 싶다면 ref. 2 가 도움을 줄 것이다.


Reference

  1. http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
  2. http://www.artima.com/insidejvm/ed2/jvm8.html

댓글 없음:

댓글 쓰기