컴퓨터 용어 정리 76
-
C++에서는 함수 템플릿을 사용하여 함수 오버로딩 대신 사용할 수 있다. template를 통해 다양한 데이터타입에 대해 동일한 기능을 수행할 수 있도록 도와준다. template는 일반적으로 클래스나 함수를 정의할 때, 템플릿 매개변수를 사용하여 탕비정보를 전달하는 것이다. 이때 선언되는 템플릿 매개변수는 사용자가 입력하는 데이터 타입 으로 대체된다. 다음의 예시를 살펴보자. 위와 같이 T 문이 smax에 대해 형식이 자동으로 바뀌며 들어가는 것을 볼 수 있다. 이는 일반적인 함수선언과 다르게 하나의 함수 만 으로도 int와 double값을 자동으로 바꾸어주기 때문에 하나의 함수만으로 다양한 기능을 수행하게 할 수 있다. C++에서만 사용이 가능하다.
-
함수 오버로딩 은 하나의 함수 이름을 여러번 정의하여 사용하는 것을 이야기 한다. 함수 오버로딩은 같은 이름의 함수가 서로 다른 매개변수 목록을 가지는 경우 사용이 가능하다. 예를 들어, 동일한 이름을 가진 함수가 있을 때 매개변수의 데이터 타입이나 개수가 다른 경우, 각 함수는 함수의 이름을 기준으로 호출되는것 이 아닌, 매개변수나 데이터 타입을 기준으로 먼저 참조된 다음, 함수의 이름을 참조하여 불러내게 된다. 이렇게 함수 오버로딩을 사용하게 되면, 코드의 가독성과 유지보수성을 향상시킬 수 있다. 비슷한 기능을 가지는 함수가 서로 다른 이름을 가지지 않아도 됨으로, 이름을 유지하는것이 더 쉽기 때문이다. 다음은 함수 오버로딩 을 사용한 코드의 예시이다. print는 전부 이름이 같지만, 매개변수의 종..
-
인라인 함수는, C++에서 사용되는 일반적인 함수와 다르게, 함수 코드를 직접 삽입하는 방식으로 동작한다. 이를통해 함수 호출에 따른 오버헤드를 줄일 수 있으며, 실행속도가 빨라진다. 인라인 함수의 특징은 다음과 같다. 함수 호출이 아닌 코드 삽입 : 함수 호출문이 있는곳에 함수코드가 직접 삽입되는 방식으로 동작하게 된다. 실행속도 향상 : 함수호출 오버헤드를 제거함으로 ( 함수가 코드에 직접 삽입됨으로 호출되지않는다 ) 실행속도가 빨라진다. 함수 크기 제한 : 함수 코드가 컴파일 시점에 CODE삽입으로 대체됨으로 함수의 크기가 일정크기 이상이 되면 인라인 함수로 사용할 수 없다. 장점 실행속도가 빠르다. 함수 호출로 발생하는 오버헤드를 줄일 수 있다. 단점 인라인 함수의 크기가 일정 이상이면 인라인 함..
-
함수 호출 규약 이란? 함수가 호출될 때 매개변수와 반환값을 어떻게 전달하는지 정의하는 규칙이다. 함수 호출 규약은 컴퓨터 아키텍처, 운영체제, 컴파일러와 같은 요소에 따라 달라진다. 그러나, 대부분의 호출규약은 함수 호출 프로토콜을 다음과 같이 규정한다. 매개 변수 전달 방식 매개변수는 레지스터, 스텍, 메모리 또는 조합으로 전달된다. 매개변수 전달 순서 매개 변수는 왼쪽에서 오른쪽으로, 또는 오른쪽에서 왼쪽으로 전달된다. 반환값 처리 반환값은 레지스터, 스텍, 메모리 또는 조합으로 처리된다. 스택 처리 함수가 호출되고 반환될 때 스택 프레임이 생성되고 해제된다. 대표적인 함수 호출 규약으로는, C언어에서 사용되는 cdecl, stdcall, fastcall, this call, vectorcall, ..
-
매개 변수 개수가 고정되지 않고 호출할 때 마다 인자의 개수가 달라질 수 있는 경우를 말한다. 가변인자를 사용하려면 C언어에서는 stdarg.h 라이브러리를 C++에서는 cstdarg 라이브러리 를 사용한다. 이 라이브러리 를 사용하면 va_list, va-start, va_arg, va_copy, va_end 등의 매크로 함수를 이용하여 가변인자 를 처리할 수 있다. 대표적인 예시는 printf() 함수가 있는데, printf() 함수는 매개변수의 개수가 고정되어있지않으며, 호출할 때 마다 인자의 개수와 형식이 달라질 수 있다는걸 알 것이다. 따라서 printf()함수는 가변인자를 사용하여 처리하게된다. 다음과 같은 함수를 예시로 살펴보자. 위 함수를 살펴보면, print_number 함수를 선언하고,..
-
스택 프레임은 함수가 호출될 때 마다 새로운 메모리 블록이 할당되어 사용되며, 함수가 실행을 완료하고 반환하면, 해당 스택 프레임은 제거된다. 이러한 스택 프레임의 생성과 제거는 호출스택(Call Stack) 구조에 의해 관리된다. 스택 프레임에는 함수에서 선언된 지역변수, 매개변수, 복귀주소, 호출 스택 포인터(Caller Stack Pointer) 등이 저장된다. 함수에서 변수를 사용하거나, 매개변수를 전달할 때마다 스택포인터 가 이동하면서 해당 변수가 저장될 위치를 지정한다. 함수 실행이 완료되면, 스택 포인터가 원래 위치로 되돌아가며, 이전에 호출된 함수의 스택프레임이 반환될 준비를 한다. 즉, 스택 프레임(Stack Frame)은, 함수에서 선언된 지역변수, 매개변수, 복귀주소, 호출 스택 포인..