본문 바로가기

프로그래밍/기본기ㆍ자료구조

stack (스택 메모리)

728x90
반응형

 

*스택에 대해서

개념을 설명하기 전에 스택과 스택메모리는 같으면서도 다르다.

- 게임 프로그래밍에 있어서 스택이란 소프트웨어단에서 하는 과정(추상 데이터형에 대해 말함)을 말한다. 후입선출의 구조, 두 가지 기본 연산인 삽입과 삭제를 수행하는 순서를 가지는 요소의 집합이다. 스택은 제한된 용량을 가지도록 구현되기 때문에 스택이 가득차면 오버플로우가 발생할 수 있다.

- 시스템적으로는 스택은 하나의 메모리를 말한다. 어떤 프로그램을 동작시키려면 메모리에 프로그램이 동작하기 위한 가상의 메모리 공간이 생성되고 그 메모리는 다시 목적에 따라 상위와 하위 메모리로 나뉘게 된다. 이 때 상위 메모리에는 스택이라는 메모리가 형성되고 하위 메모리에는 힙 메모리가 형성된다.

C# 프로그래밍에서 값 타입의 자료형은 스택에 쌓이고, 참조 타입은 스택과 힙에 쌓이는데 여기서 말하는 스택이 시스템적으로 스택 메모리를 말한다.

개념

- 사전적으로 '깔끔하게 정돈된'

- 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용되는 메모리

- LIFO 후입선출

- 후입선출 구조에 따라 베이스포인터(BP)와 스택포인터(SP)로 메모리 관리

- 메모리 계층에서 상위 메모리에 속함

- 스택의 동작을 자세히 알기 위해서는 CPU의 임시저장소인 레지스터에 대해서 알아야함

(레지스터가 일종의 컴퓨터 하드웨어의 저장소인데 우리가 게임프로그래밍에서 스택을 표현하거나 하는건 대체적으로 소프트웨어단에서 하는 과정을 이야기함 (추상 데이터형을 말함), Low 레벨의 동작에 대해서까지 깊이 알 필요는 없지만 어떤 개념인지 정도만 알아두자)

- 레지스터의 임시 저장 장소, 서브루틴 사용 시 복귀 주소 저장, 서브루틴에 인자 전달 등에 사용

- 값 타입의 자료형들이 적재되는 메모리

(int, float, bool, byte, double 등)

(힙은 참조 타입의 자료형들이 적재되는 메모리다.)

- 스택은 메모리 정리를 스스로 함

- C# struct의 경우 참조 형식과 마찬가지로 interface 구현이 가능하고 new 연산자를 사용하지만 최종 값은 스택 메모리에 할당된다.

*스택 메모리에 할당되는 값타입 자료형의 종류

- 내장형

- 논리형

- 열거형

- 문자형 (string이 아닌 char)

- 구조체

*스택 메모리 정리에 대한 간략한 이야기

- 함수 내부구조를 생각하면 알기 쉽다.

1. 지역변수 또는 매개변수(ref,out 같은 참조변수 제외하고 값 타입의 자료형들만)는 스택 메모리에 쌓인다.

2. 함수가 끝나면 값 타입의 자료형들은 스택에서 더 이상 사용하지 않는 것으로 판단하여 메모리에서 지운다.

3. 만약 재귀를 통해 같은 함수를 반복해서 호출하다보면 스택 오버플로우가 발생한다.

(스택 메모리는 힙 메모리와 달리 유동적이지 않고 컴파일 단계에서 크기가 정해지기 때문에 스택에 쌓다보면 메모리가 초과된다.)

*지역변수와 매개변수에 대한 이야기

- 우선 매개변수는 외부에서 함수를 호출할 때 값 타입의 자료형은 해당 값을 복사해서 매개변수에 할당해준다. 그리고 함수 내부에서 사용되고 함수가 끝나면 스택 메모리에서 지운다.

- 매개변수를 리턴하는 경우에도 마찬가지로 값을 복사해서 돌려주는것이기 때문에 매개변수 자체는 함수가 끝날 때 스택 메모리에서 지워진다.

- 참조 타입의 매개변수는 애초에 스택 메모리에 쌓이지 않기 때문에 지워지지 않는다.

- 지역변수도 매개변수와 마찬가지로 내부에서 사용되고 함수가 끝날때 스택 메모리에서 지워진다. 리턴할 때도 매개변수와 동일하다.

참고자료

 

스택

스택은 컴퓨터에서 사용되는 기본 데이터 구조 중 하나로 데이터를 후입선출(LIFO : Last In, First Out, FILO : First In, Last Out) 구조로 유지하는 추상 데이터형(abstract data type)을 말한다. 컴퓨터 공학에서 스택 혹은 LIFO는 추상 데이터형으로, 두 가지 기본 연산인 삽입(push)과 삭제(pop)를 수행하는 순서를 가지는 요소(elements) 집합이다. 삽입 연산은 데이터 요소를 스택의 최상위(

terms.naver.com

 

스택과 힙 - 메모리 관리 전략

​​​스택은 뭉쳐있어서 관리하기 쉽다.​이순신 장군님의 유명한 말이 생각난다. 뭉치면 살고 흩어지면 ...

blog.naver.com

 

 

질문5 메모리구조 : 메소드영역, 스택,힙

프로그램이 실행되기 위해 필요한 메모리가 일반적으로 메인메모리메인 메모리를 관리하는게 OS, JVM...

blog.naver.com

 

 

시스템 메모리의 구조

먼저 시스템 메모리가 어떻게 사용되는지 살펴보자. 시스템 메모리의 기본 구조는 [그림 5-2]와 같다. 어떤 프로그램을 동작시키면 메모리에 프로그램이 동작하기 위한 가상의 메모리 공간이 생성된다. 그리고 그 메모리 공간은 다시 목적에 따라 상위 메모리와 하위 메모리로 나뉜다. 이때 상위 메모리에는 스택(Stack)이라는 메모리 공간이 형성되고, 하위 메모리에는 힙(Heap)이 생성된다. [스택 영역과 힙 영역] 간단히 말해 스택 영역은 프로그램 로직이 동

terms.naver.com

 

15장. 함수 호출과 스택메모리

​​프로그램이 시작할때 main()함수 부터 시작되므로 main함수에 있는 매개변수 부터 메모리에 올리간다....

blog.naver.com

 

 

다람쥐와 포동포동이

 

반응형

'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글

Priority Queue (우선순위 큐)  (0) 2020.04.14
Heap (힙 메모리)  (1) 2020.04.14
Generic (제네릭)  (3) 2020.04.12
Deadlock (데드락)  (0) 2020.04.12
GimbalLock (짐벌락)  (0) 2020.04.12