바인딩
- 함수 호출을 해당 함수의 정의와 결합하는 것을 말한다.
- 즉 어떠한 크래스의 객체로 해당 클래스의 멤버함수를 호출하고자 할때 멤버함수와 객체는 결합하여 호출을 하는데, 이떄를 바인딩 된다 라고 하는 것이다.
- 함수를 만들어 컴파일을 하면 각각의 코드가 메모리 어딘가에 저장된다.
- 그리고 함수를 호출하는 부분에는 그 함수가 저장된 메모리 번지수(주소값)이 저장된다.
프로그램 실행 → 함수 호출 → 함수가 저장된 주소로 점프 → 함수 실행 → 원래 위치
위 과정에서 함수를 호출하는 부분에 함수가 위치한 메모리 번지로 연결시켜 주는 것을 바인딩(Binding) 이라고 한다.
바인딩이란 프로그램 소스에 쓰인 각종 내부 요소, 이름, 식별자들에 대해 값 혹은 송석을 확정하는 과정을 말한다.
빌드 중에 이루어지면, 정적바인딩, 실행 중 이루어지면 정적바인딩 이라고 한다
함수를 바인딩하는 2가지 방법
(1) 정적 바인딩 (일반 함수)
* 컴파일 시간에 호출될 함수로 점프할 주소가 결정되어 바인딩 되는 것.
* 컴파일 시간에 호출될 함수를 미리 정해두는 방법
* 빌드 중에 이루어진다.
void main()
{
int iValue = 2;
}
(2) 동적 바인딩 (가상 함수)
* 실행 파일을 만들 때 바인딩 되지 않고 보류 상태 둔다.
* 실행 시간에 실제로 사용된 객체의 클래스형에 의해 호출될 함수가 결정됩니다.
* 포인터가 내용이 없다가, 값을 받고 내용일 생겻을떄
* 점프할 메모리 번지를 저장하기 위한 메모리 공간(4 byte)을 가지고 있다가 런타임에 결정.
void main()
{
A* a = new [어떤것]
a->abc();
}
* 단점 : 타입 체킹으로 인한 수행 속도 저하 / 메모리 공간 낭비 => 가급적 정적 바인딩 사용
위 2 가지의 단점이 있음에도 불구하고 동적 바인딩을 하는 이유
* 어떤 포인터에 의해 접근되었는 지에 상관없이 참조된 인스턴스의 실제 클래스형에 따라 재정의된 함수 호출이 가능
'프로그래밍 > C' 카테고리의 다른 글
메모리 누수 확인 (0) | 2019.05.01 |
---|---|
메모리 저장 구조 및 영역 (코드, 데이터, 힙, 스택) (0) | 2019.05.01 |
메모리 단편화 (페이징,세그멘테이션,메모리풀) (0) | 2019.04.30 |
malloc() [C]과 new [C++] (0) | 2019.04.29 |
데이터형 크기 (0) | 2019.04.29 |