번역
c++ 오브젝트들은 어떻게 메모리에 배치되나요?
C 처럼, C++도 레이아웃을 정하지는 않고 반드시 충족해야만하는 의미적 조건만을 정의합니다. 따라서 구현이 다르면 다르게 동작합니다. 아쉽게도, 제가 알고있는 가장 좋은 설명은 구식에 현재 c++ 구현을 설명하지 않는 책에 있습니다: The Annotated C++ Reference Manual (보통 ARM이라고 부릅니다). 이 책에 주 레이아웃 다이어그램 예제가 있습니다. TC++PL의 2챕터에 아주 간단한 설명도 있습니다. 1
보통, C++은 하위 오브젝트들을 붙여서 간단하게 오브젝트들을 생성합니다.
struct A { int a,b; };
이것은 서로 옆으로 배치된 int 두개로 표현이 되고,
struct B : A { int c; };
이것은 A가 int로 되어서 서로 옆으로 배치된 int 세개로 표현이 됩니다. 2
Virtual 함수는 전형적으로 각 클래스의 오브젝트에 virtual 함수들과 함께 포인터를 추가하는것으로 구현됩니다. 이 포인터는 적절한 함수 테이블을 가르킵니다. 각 클래스는 모든 클래스의 오브젝트가 공요하는 고요한 vtbl을 가지고 있습니다. 3
원문
How are C++ objects laid out in memory?
Like C, C++ doesn't define layouts, just semantic constraints that must be met. Therefore different implementations do things differently. Unfortunately, the best explanation I know of is in a book that is otherwise outdated and doesn't describe any current C++ implementation: The Annotated C++ Reference Manual (usually called the ARM). It has diagrams of key layout examples. There is a very brief explanation in Chapter 2 of TC++PL.
Basically, C++ constructs objects simply by concatenating sub objects. Thus
struct A { int a,b; };
is represented by two ints next to each other, and
struct B : A { int c; };
is represented by an A followed by an int; that is, by three ints next to each other.
Virtual functions are typically implemented by adding a pointer (the vptr) to each object of a class with virtual functions. This pointer points to the appropriate table of functions (the vtbl). Each class has its own vtbl shared by all objects of that class.
'번역 > Bjarne Stroustrup's C++ Style and Technique FAQ' 카테고리의 다른 글
Why is the size of an empty class not zero? (0) | 2018.05.10 |
---|---|
Why is "this" not a reference? (0) | 2018.05.10 |
How do I convert an integer to a string? (0) | 2018.05.09 |
How do I read a string from input? (0) | 2018.03.14 |
Can you recommend a coding standard? (0) | 2018.01.30 |
댓글