CS Seminar 02
함수 (함수를 만드는 이유, call stack, stack overflow)
01. 함수를 정의하고 선언하기
프로그램 : data, function that manipulates data
- 함수를 정의할 때, 데이터가 있어야 가능하기 때문에데이터랑 연관이 없는 함수는 무의미하다.
함수를 왜 만들어야할까?
- 재사용을 할 필요가 있을 때
- 재사용을 하려면 일반적인 형태를 띄고 있는 것(=범용적인)이 좋다.
- 유지보수 측면에서 수정을 할 때 용이하다.
예시 : 만약 A.cpp에서 B라는 함수를 불러오기 위해서는 B가 어떤 형태인지를 알아야한다.
여기서 define과 declaration의 차이가 또 중요해지는데, 만약 컴파일러가 소스코드를 한 번만 흝는다면, define보다 declaration이 먼저 나오게되면 문제가 발생할 것이다. -
02. 변수의 존재기간과 접근범위 : 지역변수
(function) call stack의 개념
- 메모리랑 연관되어있다.
- 만약 executable 이 실행이 된다면, 소스코드가 메모리에 탑재가 된다.
메모리 : stack, heap
- stack : 지역변수
- heap : 동적할당
Stack Overflow
- 너무 많은 함수를 stack에 할당했을 때
- 너무 큰 용량의 함수, 즉 지역변수를 너무 크게 할당했을 때
- 이 경우에 일부러 heap에 동적할당을 함으로써 stack overflow를 방지하는 것이다.
Heap
- x86 머신에서 최대로 사용할 수 있는 메모리양은 약 4GB ($2^{32}$)
- pointer가 32bit -> 주소가 32bit 라는 의미 -> 그렇기 때문에 최대가 32bit인 것이다.
03. 변수의 존재기간과 접근범위 : 전역변수, static 변수
전역변수를 선언하기 위한 키워드 - static, 함수 밖에 선언
- static은 대부분 A가 없어져도 남아있으며, 해당 함수를 몇번 사용했는지를 count할 때 주로 사용한다.
04. 재귀함수에 대한 이해
- 위와 같은 이유들로 재귀함수의 사용을 최소화해야한다.
- 마치 피보나치 수열을 재귀적으로 표현하면 간단해도, 풀어서 설명하는 것이 가능하듯이 피하는 것이 좋다
윤성우의 열혈 C 프로그래밍 일부 : Chapter 09
추후 더 공부하며 추가할 예정
This post is licensed under CC BY 4.0 by the author.