내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필


이유는 3가지로 요약된다.

첫째, 함수의 포인터를 넘길때, 인라인화가 되지 않아 컴파일러 최적화가 되지 않는다.
이것은 CPU가 함수를 호출할 때의 원리를 알고 있어야 이해가 쉽게 될것이다. 인라인화와 그냥 함수 포인터를 이용한 호출은 CPU 명령 횟수의 차이를 보인다. 즉 함수 포인터로 함수 호출하는것은 그 만큼 많은 명령을 더 내려야 한다는 것이다.


둘째, 일반 함수를 이용할 경우 컴파일이 되지 않을 수 있다.
STL 플랫폼이 const 멤버 함수(string::size)를 처리 하는데 버그를 가지고 있다. 이 문제를 해결할 방법은 새로운 함수 객체를 만드는 것이다. 이것은 인라인화도 갖어다 좋아 수행 성능도 좋아 진다.


셋째, 함수 객체가 미묘한 언어 문제를 막아 줄 수 있다.
이 부분은 이해가 잘 되지 않는다. 메타 프로그래밍 원리를 알아야지만 이해가 가능 할 듯으로 보인다. 아마도 템플릿 인스턴스화 할 때, 템플릿도 이름을 갖는데, 템플릿 함수의 경우 함수명을 가지고 템플릿 명을 갖는다. 이것은 여러 템플릿이 있을 경우, 같은 이름의 템플릿이 있을 가능성이 있고, 이것은 어떤 템플릿 으로 인스턴스화 하라는건지 컴파일러에게 정확하게 알려줄수 없다는 점을 지닌다.

이것은 함수 객체라는 객체로써 전달하게 된다면, 이 문제를 해결 할수 있다고 스콧 마이어스는 말해준다.


이것도 이것이지만, 성능만으로도 큰 매트리가 있는 경우가 아닐수 없다.

관련링크
http://ilu8318.egloos.com/862038
http://lagoons.net/tt/613
http://clay.yozmn.com/blogTag/ 객체 함수 자세한 설명이 있으니 꼭 보도록



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기