COM 구조에 관한 스터디 중 Inteface 지원을 위한 vptr 및 vtable에 관한 내용을 보다, 직접 vptr과 vtable memory layout을 쑤셔보고자 시작. 이 내용을 한두번 본 것도 아닌데 또다시 그냥 지나치려니 영 감질 맛이 나는거다. 하긴, 지금 아니면 언제 이 구조를 뜯어보겠어?

일단, vtable은 함수 포인터의 배열로 이루어진 가상함수 테이블을 의미하며, vptr은 vtable을 가리키는 C++ 개체에 숨겨진 포인터를 뜻한다. 이들 vtable 및 vptr이란 명칭은 관례적으로 그리 사용한다고. 물론 가상함수가 없는(해당 클래스에 virtual 키워드가 없는) 개체는 이들 둘 모두 없다. 따라서 해당 개체의 크기는 vptr의 크기(32bit OS일 경우 4byte)만큼 작아지겠다.

앞으로 보일 예제는 32bit WindowsXP 위의 Visual C++ 2005 버전으로 테스트한 것이다. 참고로, C++ 표준은 vptr의 개체내 위치나 vtable 구현법에 대해 지정하지 않는다고 한다. 따라서 컴파일러에 따라 결과는 달라질 것이다.

more..

2008/01/15 02:37 2008/01/15 02:37

트랙백 주소 :: http://anyflow.net/trackback/331

댓글을 달아 주세요

  1. 정성태 2008/01/15 08:34  댓글주소  수정/삭제  댓글쓰기

    아래의 글도. ^^

    __purecall이 무엇일까?
    ; http://www.jiniya.net/tt/597

    • 어쨌건간에 2008/01/15 09:49  댓글주소  수정/삭제

      C++/CLI 코딩 중에 봤었죠. 호출 규약인줄 알았는데 그게 아니군요~ 한 수씩 솔솔 감사드립니다~ ^^

헝거리언 표기법에서는 접두어로서 타입의 특징을 나타내는 축약어를 사용하는데, User Defined Type이 많아질수록, 그 타입의 특징을 나타내는 축약어를 만들기가 힘들어지더라(class등의 User Defined Type이 많아지는 것은 Object Oriented Language를 사용하면 당연히 나타나는 현상).

C/C++ User Journal에 나온 Hungarian Notation 반대에 관한, Herb Sutter와 어떤 사람의 썰~. (member 변수 명명에는 camelCase에 접미어로 underbar(_)를 붙이라니.. 지저분한데.. 차라리 'm_'가 더 나아 보이는데..)

Conversations: Hungarian wartHogs by Jim Hyslop and Herb Sutter

위에까지는 05년 6월 14일에 이전 블로그에 적어둔 썰. 다음은 Modern C++ Design에 알렉산드레스쿠(!! 이름 함 지랄스럽다)가 Herb Sutter의 표기법이라며 추천한 위 대화의 결과물.

more..

2007/11/19 23:33 2007/11/19 23:33

트랙백 주소 :: http://anyflow.net/trackback/303

댓글을 달아 주세요

...
1. express concept directly in code
2. express relations among concepts directly in code
3. express independent concepts in independent code
4. compose code representing concepts freely wherever the composition makes sense


1. 개념을 코드에 직접적으로 반영한다
2. 개념들간의 관계를 코드에 직접적으로 반영한다
3. 서로 독립적인 개념들을 독립적인 코드에 반영한다
4. 개념들을 나타내는 데 있어 자유롭게 코드를 구성하되, 그 구성은 언제나 타당하도록

...

I "measure" maturity primarily based on how close people got to those ideals in production code (i.e., in code suffering real-world constraints). People who use C++ primarily as "a better C" fail on the first count - they fail to use classes, class hierarchies, and parameterization (template) to express ideas and relations among ideas directly. People who insist seeing C++ as just an object-oriented language fail on the third and fourth - they construct massive hierarchies that bind unrelated concepts together through unsuitable bases and exclude built-in types and simple classes.

성숙도를 "측정"하는 데 있어 주로 제가 사용하는 방법은, 사람들이 (현실 세계의 제약 조건이 담긴) 코드를 작성할 때 위의 이상치에 얼마나 근접해있는지를 알아보는 것입니다. C++를 "더 나은 C"로써 사용하는 사람들은 첫 번째에서 걸릴 것입니다. - 이들은 클래스나 클래스 계층체, 혹은 매개변수화(템플릿)을 이용하여 아이디어 혹은 아이디어들 간의 관계를 직접적으로 표현해내는 데 실패합니다. C++를 단순히 객체 지향 언어의 관점으로밖에 보지 못하는 사람들은 세번째와 네번째에서 걸립니다. - 이들은 적절치 않은 기반 클래스 위에 묶인 서로 관계없는 개념들, 즉 육중한 계층체를 만들어내고, 내장 타입과 단순한 클래스를 배제하곤 합니다.
...

- Stroustrup의 논문 'C++ in 2005'에서 -
개념 - 아이디어 - 를 '직접적'으로 반영, 표현한다... 이를 달리 표현하면 '코드 가독성을 높인다', 'semantic을 살린다'가 될 것이라는 생각이.. 났다. 직관적으로 알아볼 수 있는 코드.. 뭐 그런거 말이다. 이 논문에서도 여러번 그가 밝혔지만, 그래야만 개발하기가, 유지보수하기가 더욱 편해지니깐.

그의 책 "The Design and Evolution of C++"에는 C++이 어떻게 커왔는지가, 왜 그렇게 C++을 설계했는지가 담겨있다고.. 그는 광고하고 있다. 이 책이 나온지 거반 10년이 지난 지금도 거의 대부분의 내용이 유효하다고 한다. 시간이 지나면서 바뀐 것은 단지 아래의 내용 정도라고. 그토록이나 변할 것이 없는 개념을 그 당시에 써서 매우 기쁘다면서.

"I hope that X" --> "The standard says X"

움.. 역시..
2005/09/10 16:54 2005/09/10 16:54

트랙백 주소 :: http://anyflow.net/trackback/32

댓글을 달아 주세요