記錄

C) 메모리 구조 - 스택(Stack) - (1) 본문

Computer language/C

C) 메모리 구조 - 스택(Stack) - (1)

surhommejk 2017. 12. 19. 16:28



<메모리 구조 - 스택(Stack) - (1)>





cf. 지금부터 연속적으로 올리는 메모리 구조에 관한 포스팅은 제가 만든 수업자료가 아님을 밝힙니다. 유투브에 올라온 강의를 듣고 수업 복습용으로 남기는 포스팅이며 유투브 강의 출처는 맨 밑에 밝혀둡니다.


Code Segment    - C언어 등 인간이 이해할 수 있는 프로그램 언어가 컴퓨터가 이해할 수 있는 코드

   번역되어 저장되는 곳

Data Segment     - 전역변수, static변수, 문자열이 들어가는 공간

   프로그램이 실행되기 전인 컴파일시에 적재된다

Heap                 - 동적 할당 영역. 프로그램이 실행된 중간에 필요에 의해 메모리에 적재했다가 없앴다가

   할 필요성이 있는데 이 때에 사용되는 공간이다. 추후 이것은 강의를 보고 따로 포스팅

Stack Segment    - 지역 변수, 함수 parameter가 적재되는 공간으로 런타임 시에 생성된다












 main 함수가 트리거로 실행되면서 int a, int b, int sum 이 차례로 실행된다. 초기화가 되지 않았으므로 일단 쓰레기값으로 선언만 되고 있는 상태. a가 먼저 선언되고 그 뒤 b가 선언되었으므로 a가 먼저 들어간 모습도 확인할 수 있다.


추후 a =3, b= 5로 초기화가 되면 쓰레기값 자리에 제대로된 값이 들어가게 된다.








a =3, b =5로 초기화되면서 차례로 공간에 값이 들어감









main 함수의 sum = add(a,b)가 실행되면서 add함수로 이동 후 add함수의 파라미터가 먼저 적재되는 과정이다. 함수의 파라미터는 뒤에서 앞으로 진행됨을 알자. 그림에서 보듯 b가 먼저 적재되고 그 다음 a가 적재되고 있다. 값은 main에서 넣어준 값이 들어가게 된다.


그리고 여기서 주목할 부분은 새로운 함수인 add를 호출하면 기존의 main함수의 stack은 그대로 둔 채 그 위에 새로운 함수의 stack이 쌓인다는 것이다!!!







int sum에 의해서 선언만 된 sum으로 공간이 할당되면서 쓰레기 값이 들어갔다.

그리고 연산에 의해서 8이 들어가게 된다








 add 함수가 종료되면서 add함수에 쓰인 지역변수가 모두 날아간(pop) 모습이다.

그리고 연산된 결과인 8이 sum에 들어갔다.








main 함수의 sum = add(4,5)가 실행되면서 파라미터는 뒤에서부터 적재된다는 원칙에 의해

b에 5가 할당, a에 4가 할당이 된 후 sum에 a+b값인 9가 할당되었다









sum의 공간에 새로운 값인 9가 들어간 모습









프로그램이 종료되면서 stack에 적재된 모든 것이 날아간 모습







cf. 지역변수로 선언되고 초기화 된 값을 다른 함수에서 사용할 수 없는 이유가 스택 자체의 주소값이 다르기 때문이라는 것을 이러한 메모리 구조의 학습을 통해 알 수 있다.




출처 : https://www.youtube.com/watch?v=TEgAB-QVnvA

'Computer language > C' 카테고리의 다른 글

C) 배열과 포인터  (0) 2017.12.21
C) 배열  (0) 2017.12.21
C) 포인터  (0) 2017.12.21
C) 메모리 주소와 Align  (0) 2017.12.20
C) 메모리 구조 - 스택(Stack) - (2)  (0) 2017.12.19
Comments