바인딩(binding)
각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것
변수, 배열, 라벨, 절차 등의 식별자가 대상인 메모리 주소, 데이터형 또는 실제 값으로 배정되는 것이 이에 해당됨. 예를 들자면 int a = 1; 이런거에 int, a, 할당되는 데이터 값 1 이런 것들이 포함됨.
메모리 번지로 연결시켜 주는 것
바인딩 종류는 2가지가 있는데 정적 바인딩과 동적 바인딩이 있ㄷ.
메모리에 값을 할당하는 것
Static binding( 정적 바인딩 )
컴파일 과정에서 바인딩 되는 것을 정적 바인딩이라고 함.
프로그램 실행 이전에 값이 확정됨
컴파일 타임에 호출될 함수나 변수 등이 결정됨
컴파일 시 이미 값이 확정이 되어 있기 때문에 속도가 빠름
Dynamic binding( 동적 바인딩 )
값이 동적으로 결정되어 시스템 설계가 유연함
점프할 메모리 번지를 저장하기 위한 메모리 공간을 가지고 있다가 런타임 즉 프로그램이 실행될 때 결정이됨. 이때 메모리는 4byte 를 가지고 있어서 저장하는 것이 크든 작든 같은 메모리를 저장하기 때문에 메모리 공간 낭비가 있음
실행 시에 메모리를 할당
heap 이라는 곳에 저장됨( heap은 런타임 시 메모리를 할당해주는 곳 )
간단한 예시
int a = 1;
이라는 것으로 예시를 들자면 int 와 a 는 타입과 변수로 정적 바인딩이다. 데이터 타입과 변수명은 컴파일 시에 메모리에 할당됨, 하지만 1은 프로그램 동작 시 변수에 값이 할당되는 것으로 동적 바인딩이라고 할 수 있다. 또 다른 예시로는 포인터가 있다. 일반 변수라면 프로그램이 끝날 때 까지 같은 주소값을 가르키지만 포인터는 계속 가르키는 주소가 변할 수 있기에 동적으로 할당된다.
관련 포스팅
참고자료
https://kyoun.tistory.com/33
https://todayscoding.tistory.com/16
https://online-unreal.tistory.com/75