2010-06-05 4 views
11

g ++ 컴파일러 또는 다른 방법을 사용하여 C++ 객체의 레이아웃을 인쇄하는 방법이 있습니까? 단순화 예 g ++ 컴파일러를 사용하여 C++ 객체의 인쇄 레이아웃

class A{ 
    int a; 
}; 

class B:public A{ 
    int b; 
} 

정도로 출력 될 것이다 (가정 INT 4 바이트 소요)

A- 
0  4 
+ a + 

B- 
0  4  8 
+ A.a + b + 

(제 경우 가상 머신 코드) 오브젝트의 배치를 이해하는 것이 유용 할 것이다.

미리 감사드립니다. 는 Zaheer

답변

0

C++은 자기 반성이없는

감사합니다. 코드가 컴파일되면 클래스에 대한 모든 정보가 손실됩니다 (typeidstd::type_info 제외).

+2

나는 그가 런타임 내성에 대해 이야기하고 있다고 생각하지 않는다. 그러나 그의 코드에있는 객체를 위해 컴파일러가 선택한 메모리 레이아웃에 관해 말할 수있는 컴파일러 옵션에 관해서는 생각하지 않는다. –

10

매뉴얼 페이지를 보면 -fdump-class-hierarchy일까요?

2

디버거가 찾는 정보는 -g으로 컴파일 할 때 디버거가 필요로하는 정보입니다. (리눅스와 같은) DWARF/ELF 플랫폼에서 실행하여 거기에 무엇을 볼 수 있습니다 : 다른 플랫폼에

g++ -g -c foo.cc 
readelf -w foo.o 

objdump -g foo.o이 작동하지 않을 수 있습니다.

ELF/DWARF의 경우 pahole을 시작하는 것이 좋습니다.

관련 문제