스택 메모리와 스택 구조에 대해
글쓴이: hmd7932 / 작성시간: 수, 2014/03/26 - 12:01오후
자료구조를 공부하고 있던 중 궁금한 점이 있어 올립니다.
스택이라는 후입선출 구조에 대해 공부하고 있는데 한 가지 의문점이 생겨서 질문드립니다.
Push, Pop, Peek가 대표적인 스택의 동작이라는 것을 공부하였는데
"스택메모리같이 지역 변수 등을 차곡차곡 쌓아두는 이런 메카니즘을 스택으로 구현하다면 편리하다라는 말이 좀 걸리는데요?"
물론 할당과 해제 면에서 편리하다는 의미를 알겠는데, 실제 코드를 작성하다보면 변수에 랜덤으로 액세스하게 되잖아요?
예를 들면 bottom에서 top으로 a=1,b=33,c=5,d=7라는 데이터가 쌓여있을 때, 코드에서 b라는 데이터에 접근했다가 c라는 데이터에 접근했다라는 것과 같이...
즉 스택 메모리에서 스택이라는 자료구조가 편하다는 측면은 자료의 할당과 해제 측면에서 편리하다는 말인지 이것을 알고싶습니다.
Forums:
namespace를 stack으로
namespace를 stack으로 관리합니다.
스택이라는 자료구조가 편하다는 측면은 자료의 할당과
스택이라는 자료구조가 편하다는 측면은 자료의 할당과 해제 측면에서 편리하다. - OK
일단 스택에 올라간 데이터는 스택 포인터 (ESP)로 랜덤하게 접근할 수 있습니다.
아..
스택포인터라는게 최상위 데이터만 가르키는게 아니었군요 ^^; 열심히 공부해야겠네요ㅜㅜ
스택이란 아마도 이런 의미일 겁니다.
int ar[10];
int* dar=new int[10];
위에서 첫 번째와 달리 두 번째는 동적으로 할당되는 배열이라는 점을 제외하면 ar과 다를 것이 없습니다. 이런 배열구조에서는 후입선출법으로 메모리를 관리하는 것이 큰 장점이 됩니다. 그렇지 않은 경우에는 속도면에서 엄청난 낭비가 초래됩니다. 직접 vector와 같은 동적배열을 구현해보신다면 왜 스택이라는 자료구조가 필요한지 자연스럽게 알게됩니다. 스택이 왜 필요한지 궁금하시다면 vector를 공부해보세요. 메모리가 어떻게 생성되고 해제되는지를 생각해보면서요.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
감사합니다.
스택이라는 자료구조가 어떤 데이터 입출력의 모델링에 있어 유용한건 알겠는데 아직 Vector라는 동적 배열에 대해서의 유용성에서는 몰랐네요. 열심히 공부해야겠습니다 ㅜㅜ
잘못 생각하시는 부분이 있는거 같아요
질문 내용중
"실제 코드를 작성하다보면 변수에 랜덤으로 액세스하게 되잖아요?"
라는 부분이 있어서 말씀드릴께요
프로그램에 있어서 절대적인 랜덤은 없어요
어디까지나 다 일정한 규칙으로 사용자가 요구하는 사항에 근접 또는 정확하게 맞추어 줄 뿐입니다
질문자분이 인식하시는 랜덤도 실제 랜덤을 구현하는 방식이 존재합니다 (메르센 트위스터, WELL ..)
이제 1년밖에 안되었지만 제가 겪은 바로는
어디까지나 프로그램은 정확하게 인풋에 대한 아웃풋
거짓말을 하지는 않더라구요
"스택메모리같이 지역 변수 등을 차곡차곡 쌓아두는 이런 메카니즘을 스택으로 구현하다면 편리하다라는 말" 은
위의 예를 생각해 본다면
사용자 입장에서는 랜덤으로 느껴지게 되지만
스택메모리에 변수를 할당이나 해제, 연산 하는 무엇인가 매커니즘이 있을겁니다
그리고 그 매커니즘에 가장 효율적인게 스택이라는 후입선출 방식이라고 생각하시는게 맞는거 같습니다
1년차 임베디드 소프트쟁이 입니다
시스템에 관심이 많습니다
질문자의 질문 문맥이랑은 다른 듯. 질문자는 랜덤
질문자의 질문 문맥이랑은 다른 듯.
질문자는 랜덤 함수를 의미한 게 아니라,
프로그래머가 임의로 스택 변수에 접근하는 경우를 말하는 것입니다.
감사합니다.
대신 말씀해주셨네요 ^^
아
엉뚱한 댓글 죄송합니다
1년차 임베디드 소프트쟁이 입니다
시스템에 관심이 많습니다
댓글 달기