함수 정의
프로그램 메모리 구조
프로그램 실행을 위해 운영체제로부터 할당받은 메모리
코드
(소스 코드)
데이터 static, 전역변수처럼 프로그램 시작 할 때부터 종료될 때까지
(정적메모리영역) 메모리 공간에 있어야 할 데이터가 저장
스택 지역변수나 매개변수처럼 함수 호출시에 메모리 할당되었다가
(지역 변수) 함수 실행 종료와 함께 자동 소멸 됨.
힙 동적으로 메모리가 할당되는 곳,
(동적메모리영역) 프로그래머가 원하는 시점에 할당하고 소멸시킬 수 있는 영역
함수의 호출
함수 호출 시 인수 전달 방법
- 값으로 호출하기(call-by-value)
: 호출하는 곳에서 인수를 전달할 때 인수의 값이 매개 변수로 복사되는 방법
- 참조로 호출하기(call-by-reference)
: 원본 인수가 함수에 전달되는 방법이다. 함수 안에서 매개 변수를 변경하면 원본 인수가 변경된다.
참조자
변수의 별명
참조 변수는 일반적인 변수와 다르게 메모리 위에 새로운 영역을 잡지 않음.
단순하게 기존에 있던 변수와 연결(바인드)해서,
기존에 있던 변수에 새로운 이름을 붙여주는 것뿐 => 원본 변수가 꼭 필요함
포인터
- 주소를 저장하는 함수
- 포인터 선언 : 형명*포인터명;
- 포인터를 통해 원래 변수의 값 접근 : *포인터명;(* : 간접참조연산자)
값으로 호출하기 vs 참조로 호출하기
- 참조로 전달은 인수와 매개변수가 동일 한 객체이므로 따로 복사할 필요가 없기 때문에 복사 비용이 발생하지 않음.
- 포인터로 전달은 4바이트의 포인터만 복사하면 되므로 복사 비용이 굉장히 적음
- 변경을 하면 안 되는 경우에 작은 객체라면 값으로 전달을 사용
큰 객체라면 const 한정자를 붙여서 참조로 전달 또는 포인터로 전달을 사용 - 변경이 필요한 경우에는 반드시 참조로 전달 또는 포인터로 전달을 사용
중복 함수(overloading)
- 동일한 이름의 함수를 여러 개 정의하는 것
인라인 함수
- 함수 이름 앞에 inline이 붙으면 컴파일러는 함수를 생성하지 않고
함수의 코드를 호출하는 곳에 직접 집어넣는다.
- 인라인 함수의 장점
: 함수 호출은 꽤 복잡한 과정을 거치므로, 약간의 시간이 걸림.
함수의 실행 시간이 매우 짧다면, 함수 호출에 걸리는 시간도 부담이 될 수 있음
-> 함수를 호출하는 데 걸리는 시간은 절약
- 인라인 함수의 단점
함수 내용이 많은 경우 인라인 함수를 많이 호출할수록 실행파일의 크기가 커질 수 있음
(호출한 위치마다 기계어 코드 전체가 치환되므로)
=> 인라인 함수는 크기가 작고 간단한 동작을 하는 1~2줄짜리 함수에 주로 사용하여 프로그램 실행 성능을 향상할 수 있다.
재귀함수
자기 자신을 참조하는 함수
재귀함수의 호출과정
스택 프레임(시스템 스택) 스택 영역에 저장되는 함수의 호출정보
함수가 종료되면 복귀할 주소, 매개변수, 지역변수가 포함됨
'C++' 카테고리의 다른 글
<C++> 7. 클래스 (0) | 2024.04.01 |
---|---|
<C++> 6. 배열과 벡터 (1) | 2024.03.26 |
<C++> 4. 제어구조 (0) | 2024.03.19 |
<C++> 3. 문자열 (0) | 2024.03.11 |
<C++> 2. 입출력 (0) | 2024.03.05 |