일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Cookie
- PL/SQL
- 암호화
- jQuery
- Ajax
- model1
- HTML
- EC2
- node.js
- AWS
- 알고리즘
- 배포
- JSP
- 웹게임
- docker
- phaser
- 블록체인
- autowired
- SQL
- Spring
- RDS
- JavaScript
- 도커
- 웹소켓
- express
- Servlet
- websocket
- 비트코인
- tiles.xml
- CSS
- Today
- Total
記錄
C) 메모리 구조 - 스택(Stack) - (1) 본문
<메모리 구조 - 스택(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 |