나는 다른 것은 몰라도 적어도 스택이 어떠한 방식으로 동작을 하는지는 알고 넘어가는 것이 굉장히 중요하다고 본다. 이유는 실제로 우리가 프로그래밍을 하면, OS에 의해서 해당 Application은 Segment 단위로 나뉘어서 페이징을 하는 방식을 이용하기도 하고, 아니 적어도 Segment를 이용하는데 지역 변수 등이 스택에서 놀기 때문이다. 실제로 제작을 하건 안하건 상식 중에 상식이라고 생각하고 동작 방식에 대해서는 확실하게 이해하고 넘어가는 것을 목표로 하자.


위의 이미지는 아래의 링크에서 가져옴.
http://sccoec.edublogs.org/category/students/alicia-m/

보통 스택을 설명을 할 때, 위의 이미지와 같이 쌓여있는 물건을 이용하는 경우가 많은데, 사실 스택이 그러한 방식으로 동작을 하기 때문이다. 기본적으로 FILO 라고 이야기를 하기도 하는데, 이는 First In - Last Out 의 약자이다. 가장 먼저 들어온 것이 가장 나중에 나간다는 의미이다.

위의 이미지와 같이 책을 쌓아놓았다. 여기서 위에서 3번째에 있는 녹색 책을 꺼내기 위해서는 어떻게 해야할까?
가장 위의 책 2권을 먼저 뺀 후에, 녹색 책을 꺼내고 다시 기존의 책 2권을 쌓아야 한다.

이해 했는가? 그러면 스택의 모든 것을 이해하였다.


http://mixed.springnote.com/pages/158060?print=1
위의 이미지는 위의 링크에서 가져옴.


위와 같은 방식으로 Push하여 넣고, Pop 하여 뺀다.


이렇게만 설명하면 너무 택도 없으니 조금만 진도를 더 나간다면...

* 스택 포인터라는 것이 있어서 이는 가장 마지막에 들어온 데이터가 위치한 곳의 주소값을 가리키고 있는다.
* 스택에서 해당 메모리가 밖으로 빠져나간다고 하더라도, 기존의 자료가 0으로 초기화되는 것은 아니다.
 - 이 두 가지를 이용하면 재미있는 것이 나올 수 있다. 어떠한 것이 나올 수 있는지 생각만 해보자.

* 만약 프로그래밍으로 구현을 한다면, 반드시 중간에 있는 것을 빼기 위해서 가장 마지막에 들어온 것을 빼낸 다음, 원하는 것을 가져온 다음 빼낸 것을 다시 넣는 동작을 해보자. 이는 순수하게 이해도를 높이기 위함이다.


아무래도 스택에 대해서는 운영체제 혹은 임베디드나 CPU 관련된 내용의 카테고리에서 더 진행하는 것이 옳은 것 같다. 메모리에 대한 이해도 없이 그냥 이걸 보면 좀 별로일 듯 싶어서 설명은 여기서 마무리한다.
저작자 표시 비영리 변경 금지
신고
by 가우초 2011.09.25 15:11
| 1 |