C++/문법
C++) cout 스트림 버퍼/ 함수 호출 오버헤드/ Inline함수
그린티라떼
2021. 5. 8. 15:09
//cout의 스트림 버퍼에 단순히 삽입하고 끝.
std ::cout << '\n';
//endl() 함수는 '\n'을 cout의 스트림 버퍼에 넣고, cout에게 현재 스트림 버퍼에 있는 데이터를 즉각 장치에 출력하도록 지시
std ::cout << std ::endl;
함수 호출 오버헤드
함수 호출 | 돌아올 리턴 주소 저장 | → | CPU 레지스터 값 저장 | → | 함수의 매개 변수를 스택에 저장 | 함수 실행 | ||
↗ | ↘ | |||||||
↖ | ↙ | |||||||
돌아갈 주소를 알아내어 리턴 | ← | 저장한 레지스터 값 CPU에 복귀 | ← | 함수의 리턴값을 임시 저장소에 저장 |
Inline 함수
- 컴파일러는 인라인 함수를 호출하는 곳에 인라인 함수의 코드를 그대로 삽입하여 함수 호출이 일어나지 않게 함.
- 즉, 함수 호출 오버헤드가 없어지게 됨.
- 제약 사항 : 컴파일러는 함수의 크기나 효율을 따져서 불필요한 경우 인라인선언을 무시함.
- : 재귀 함수, static 변수, 반복문, switch문, goto문등을 가진 함수는 허용x.
- 클래스의 선언부에 멤버함수를 직접 구현시 인라인 함수로 자동 처리됨.