[ CnUnix ] in KIDS 글 쓴 이(By): zeo (ZeoDtr) 날 짜 (Date): 1994년05월30일(월) 13시40분11초 KDT 제 목(Title): Re:윤익수 개발 환경, C++ 질문 우선, HellCat님, 관심을 가져 주셔서 감사합니다. 그 글은 get해 놨어요. 이런 글은 Mail성이지만 고맙다는 생각을 가졌다는 것을 공표(?)하고 싶어서... (다른 사람들의 Mail성 글도 마찬가질거예요. 이런 거죠. 사람들 많이 있는 데서 "xxx씨! 어제 고마왔어!"하면 주위의 사람들도 씨익 웃는 거...) 그리구, C++ 질문에 대해서... 우선 exception에 관해선데, 아마도 compile 옵션중 그 기능을 disable하는 것이 있을 거여요. 안그러면 볼랜드가 바보죠. 그건 마치 floating point 연산을 하나도 안하는데 괜히 연산 emulator를 링크하는 짓이나 다를 바가 없겠죠. C++ exception feature 넣기가 힘들다던데, 볼랜드의 노력에 박수를 쳐 줘야겠죠. 그리구, 가상 테이블이란 건 virtual function의 pointer들을 모아놓은 것을 말합니다. 따로 run-time module이 필요치 않은 C++로 만들어진 프로그램에서, 어떻게 object에 따라 그때그때 다른 function을 call할 수 있을까요? (요걸 run-time binding이라고 하던가? polymorphism도 경우는 다르지만 결국 같은 얘기고) 바로 function pointer죠. virtual function이 하나라도 정의된 class(struct)에는 hidden pointer가 하나 추가됩니다. 그것이 바로 vptr이라고 하던가? 하는 virtual function pointer table을 가리키는 pointer지요. virtual function을 call할 때는 사실 이 pointer 들을 dereference하는 작업이 추가되는 거죠. 그러니까, 두번의 dereference. 어쨌든, 당연히 이 virtual function table은 class당 하나 있는 거지 object당 하나 있는게 아닙니다. 그리고, virtual function이 하나도 없는 class(struct)에는 vptr도 없구요. 따라서, C 코드를 그대로 C++로 재컴파일하면 overhead가 더 들어갈 일이 전혀 없습니다. 그리고, virtual function calling mechanism은 보통 C 문화의 switch-case 문과 대비되는데, switch문의 table search보다는 virtual function calling이 더 효율적이랍니다. 제가 생각하기에도 그렇구요. (단 두번의 dereference!) 그리구, 유연성이나 확장성은 virtual function 쪽이 훨씬 좋구요. (물론 경우에 따라서지만) 음, 하지만 Windows에서 message를 dispatch할 때 가상 테이블을 쓴다면 (아마 그럴 겁니다) 약간 비효율적인 면도 있을 것 같네요. 하지만, Windows programming 에서 그런 효율 (거의 instruction 몇개, data 몇백 바이트) 가지고 따진다는 게 좀 우습지 않나요? 효율을 따질 때 안따지고 엉뚱한 데에서 따지면 오히려 피봅니다. ...도움이 되었길 바랍니다... ZZZZZZ zZZ eeee ooo zZ Eeee O O ZZZZZZ Eeee OoO |