stack은 LIFO 구조를 말합니다.
Last In First Out. 마지막 들어온게 처음 나간다는 뜻이죠.
전역 변수가 아닌 지역 변수의 경우에 stack에 저장하는게 맞기는 한데,
stack을 만들고 push하는 것은 사람이 일일이 하는게 아니라 기계적인 매카니즘으로 자동으로 됩니다.
int buff[5]는 stack에 5개의 int공간을 넣어(push)라는 뜻이고,
buff[0] = 3은 buff중에서 첫번째 공간에 3을 써넣어(assign)라는 뜻입니다.
pop은 지역변수가 사라질 때 역시 기계적으로 자동으로 됩니다.
즉, 설명하신 구문에서만 따지자면 push되고 pop되는 것은 "메모리 공간"이지 "값"이 아닙니다.
자료구조에서 "스택"이라고 하면 데이터를 접시처럼 차곡차곡 쌓아놔서 (이런 걸 영어로 stack이라고 하죠...) 가장 마지막에 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조를 스택이라고 합니다.
그런데 함수가 다른 함수를 호출하다 보면 결국 가장 마지막에 불린 함수가 가장 먼저 끝나기 때문에 이 함수들이 사용해야 할 로컬 변수를 저장하는 공간도 스택과 비슷한 방식으로 쓰이게 됩니다.
그래서 이렇게 "함수들의 지역 변수를 저장하는 공간"도 스택이라고 불립니다.
그런데, 첫번째의 스택과 두번째의 스택은 사용 방법이 비슷하지만 성격이 좀 다릅니다. 첫번째 스택은 "자료구조"로서의 스택이고, 두번째 스택은 그냥 프로그램이 동작하는 데 필요한 연속된 메모리 공간을 스택이라고 부르는 것입니다.
그래서 이 둘을 구분 안 하고 섞어쓰면 헷갈리기 시작합니다. 이를테면 "함수가 시작할 때 스택에 push를 어떻게 하나요?" 같은 질문은 그냥 "함수가 시작할 때 스택 가장 끝에 자기가 필요한 만큼 공간을 할당한다" 이렇게 이해하시는 게 좋습니다. 이 스택은 자료구조가 아니므로 굳이 push/pop 연산을 끌어들일 필요가 없습니다.
* 힙(heap)도 마찬가지로 자료구조로서의 힙과 "메모리를 동적 할당할 수 있는 공간"으로서의 힙은 전혀 다른 놈이죠. (이 경우는 심지어 비슷하지도 않습니다.)
자료구조 책 참고
stack 에 대한 정의부터 내리시는게 먼저인듯
wiki 참고요 - http://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D
stack에 대한 정의는 나름 찾아본다고 찾아봤는데
stack에 대한 정의는 나름 찾아본다고 찾아봤는데 ㅠㅠ
LIFO구조고 지역변수 선언시 stack에 메모리가 할당된다~
뭐 등등 이런 이론적인 것들만 되어있어서
실제적으로 push와 pop이라는게
코딩을 구현하는 과정 중 어느부분일까 궁금해서요 ^^
답변 감사합니다!!
stack은 LIFO 구조를 말합니다. Last In
stack은 LIFO 구조를 말합니다.
Last In First Out. 마지막 들어온게 처음 나간다는 뜻이죠.
전역 변수가 아닌 지역 변수의 경우에 stack에 저장하는게 맞기는 한데,
stack을 만들고 push하는 것은 사람이 일일이 하는게 아니라 기계적인 매카니즘으로 자동으로 됩니다.
int buff[5]는 stack에 5개의 int공간을 넣어(push)라는 뜻이고,
buff[0] = 3은 buff중에서 첫번째 공간에 3을 써넣어(assign)라는 뜻입니다.
pop은 지역변수가 사라질 때 역시 기계적으로 자동으로 됩니다.
즉, 설명하신 구문에서만 따지자면 push되고 pop되는 것은 "메모리 공간"이지 "값"이 아닙니다.
감사합니당~!
감사합니다!!
그럼 프로그래머가 push(변수선언, 함수호출 등) push는 할수있지만
이러한 것들을 인위적으로 pop할 수 있는것이아니라 함수가 끝나면 자동으로 pop된다는 거죠? ^^
스택이란 말이 두 가지로 쓰여서 헷갈리시는 것 같은데
자료구조에서 "스택"이라고 하면 데이터를 접시처럼 차곡차곡 쌓아놔서 (이런 걸 영어로 stack이라고 하죠...) 가장 마지막에 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조를 스택이라고 합니다.
그런데 함수가 다른 함수를 호출하다 보면 결국 가장 마지막에 불린 함수가 가장 먼저 끝나기 때문에 이 함수들이 사용해야 할 로컬 변수를 저장하는 공간도 스택과 비슷한 방식으로 쓰이게 됩니다.
그래서 이렇게 "함수들의 지역 변수를 저장하는 공간"도 스택이라고 불립니다.
그런데, 첫번째의 스택과 두번째의 스택은 사용 방법이 비슷하지만 성격이 좀 다릅니다. 첫번째 스택은 "자료구조"로서의 스택이고, 두번째 스택은 그냥 프로그램이 동작하는 데 필요한 연속된 메모리 공간을 스택이라고 부르는 것입니다.
그래서 이 둘을 구분 안 하고 섞어쓰면 헷갈리기 시작합니다. 이를테면 "함수가 시작할 때 스택에 push를 어떻게 하나요?" 같은 질문은 그냥 "함수가 시작할 때 스택 가장 끝에 자기가 필요한 만큼 공간을 할당한다" 이렇게 이해하시는 게 좋습니다. 이 스택은 자료구조가 아니므로 굳이 push/pop 연산을 끌어들일 필요가 없습니다.
* 힙(heap)도 마찬가지로 자료구조로서의 힙과 "메모리를 동적 할당할 수 있는 공간"으로서의 힙은 전혀 다른 놈이죠. (이 경우는 심지어 비슷하지도 않습니다.)
댓글 달기