2005년 6월 8일 수요일

[tech]C++ template

C++ template 삽질 좀 해서
STL vector, string, map의 allocator를 shared memory나 mmap 같은 걸로 바꾸는 걸 해봤다.
Allocator는 /usr/include/c++/3.4/ext/new_allocator.h를 참고했다.
뭔가 오묘한 짓을 많이 해서 STL 내부를 모르니 잘 모르겠다.
그냥 비슷하게 베껴 적으니 잘 수행됐다.


Template은 거의 macro 비슷한 거라서 문법 오류가 있더라도 사용되지 않는 부분은 compile시에도 전혀 에러를 내지 않는 다.
그래서 STL 깊숙한 곳에서 allocator의 특정 부분을 쓸때만 오류가 발견되기도 한다.
그래서 STL 선언시에는 문제가 없는 데, 이런 저런 method를 call하면 개발 중에 compiler가 더 많은 부분을 요구하기도 한다.


그리고 에러 메시지가 매우 복잡하다.
컴파일러가 기존의 문법만큼 smart하고 깔끔하게 보여주지 못하기 때문에
마치 call stack처럼 STL 내부의 모든 코드들을 뱉어낸다.


Library라고 해도 binary형태가 아니라 거의 항상 source코드 형태로 보여진다. (그래서 매크로라고 하지..)
뭐 최신 컴파일러에서는 binary로 보여줄 지도 모른다는 군.


매크로 비스무레해서 function call overhead, inheritance에 따른 vtbl을 찾는 overhead 같은 것이 없어서 빠르다.


 

댓글 없음:

댓글 쓰기