티스토리 뷰
함수 포인터 유용성 1 : 동적바인딩
함수포인터는
함수의 동적바인딩과 정적바인딩 때문입니다.
함수포인터 없이, 그냥 함수 이름을 직접 써서 호출하는것은 정적 바인딩입니다.
해당 함수의 위치가 컴파일 당시에 파악이 가능하므로
컴파일러가 해당 위치를 바이너리에 포함시키고, 해당 파일이 실행될때는 항상 같은 부분을 가리키게 되는거죠.
하지만, 어떤 함수를 호출할지 컴파일 타임이 아니라, 런타임에 동적으로 결정해야 할 경우들이 생깁니다.
대표적으로, 플러그인 같은것들이죠.
플러그인 모듈을 설치하더라도, 플러그인을 불러드리는 프로그램을 재컴파일 할 필요가없습니다.
왜냐면, 함수 포인터를 이용하여, 동적바인딩을 하기 때문입니다.
즉, 실행시에 해당 플러그인 모듈을 열어서, 거기안에 들어있는 함수를 동적으로 로드한후,
함수포인터를 이용하여 해당 함수를 호출하는 것입니다.
새로운 함수/모듈을 추가할때마다,
매번 프로그램을 재컴파일 해야한다면, 프로그램의 유용성/확장성이 많이 떨어질것입니다.
사실, C++의 virtual function도 함수 포인터를 이용하여 구현되어있습니다.
컴파일타임에는 어떤 객체가 불러들일지 알수가 없습니다.
따라서, 어느 virtual function을 바인딩 해야하는지도 알수가 없죠.
virtual function은 동적으로 객체가 할당될때마다, 해당 class의 virtual table에 stack의 구조로
자신의 멤버함수를 쌓아가는 구조로 동작합니다.
암튼, 함수포인터는
함수를
정적바인딩(컴파일타임)뿐만이 아니라,
동적바인딩(런타임)도 가능하게 하기위해 필요합니다.
함수 포인터 유용성2 : 쓰레드
함수 포인터를 이용하면 동일한 모양의 함수를 호출할 때 하나의 문장으로 처리가 가능하기 때문입니다.
즉 함수의 원형이 동일한 경우라면 함수 포인터를 이용해서 여러 개의 함수에 접근 할 수 있습니다.
윈도우 프로그래밍에서 스레드 처리 함수 같은 경우는 사용자가 어떤 함수를 스레드 함수로 사용할 지 알 수 없기 때문에 미리 함수의 원형을 설정해두고 함수 명만을 등록하도록 하는 형태를 취하게 됩니다.
이러한 경우 함수 포인터를 사용하며 다른 모든 비주얼 프로그래밍에서도 사용되는 기법입니다.
즉 함수를 다른 함수의 인수로 전달 할 수 있기 때문입니다.
-> 함수로 선언 후에 쓰레드에서 사용하게 되면, 여러 쓰레드가 한개의 메모리에 쓰기 때문에
메모리가 겹칠 수가 있기에 문제가 생긴다(log 같은 것은 그냥 찍는 것이기에 상관이 없지만)
그래서 함수포인터를 사용함으로써, 쓰레드에서 함수 포인터를 쓸 때마다 동일한 메모리가 아닌
개별의 메모리를 사용함으로써 메모리 중복을 피할 수 있다.
'P rogramming > C conf' 카테고리의 다른 글
| memset() 사용법 (0) | 2012.09.13 |
|---|---|
| struct timeval 사용 (0) | 2012.09.13 |
| getopt (0) | 2012.09.11 |
| AF PF 차이 (0) | 2012.09.10 |
| Shared Memmory (0) | 2012.09.10 |
| 함수 포인터의 유용성 : 동적바인딩 (0) | 2012.09.05 |
| KISA의 SEED test src (0) | 2012.08.23 |
| Compile Error : LINK : fatal error LNK1561: 진입점이 정의되어야 합니다 (0) | 2012.08.23 |
- Total
- 331,919
- Today
- 0
- Yesterday
- 89
- 알프스목초지1-4
- Joseph Redmon
- 리눅스
- C# 패널
- 자신만의향
- PolyBridge1-4
- DaleEvans
- C# 패널 예제
- PolyBridge1-3
- 믿는다는것
- 알프스목초지1-3
- PolyBridge1-5
- PolyBridge하는법
- 인생의시간
- 알프스목초지1-2
- PolyBridge1-1
- OnlyICan
- 분할작업
- Nina Fedoroff
- 1Day1Sentence
- c#
- 알프스목초지1-1
- 사람의인생
- ted
- PolyBridge
- 좋은글귀
- 알프스목초지1-5
- PolyBridge1-2
- 폴리브릿지
- C# 판넬 예제
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 2017/08 (4)
