본문 바로가기
다양한 TIP

c++ 맹글러 해석방법 알아보기

by 유기농프로그래밍 2023. 7. 26.
반응형

C++ 이름 맹글링(name mangling)의 일반적인 규칙

1. 함수나 클래스 이름은 네임스페이스와 클래스 계층 구조를 포함합니다.
2. 템플릿과 함수 오버로딩은 구분하기 위해 특수한 문자열이 사용됩니다.
3. 함수의 매개변수 타입과 반환 타입은 약어로 표현되어 포함됩니다.

 

이름 맹글링은 컴파일러에 따라 달라질 수 있으니 참고해주세요.

Linking 단계에서 이름 맹글링된 심볼을 올바르게 해석하도록 주의해야 합니다.

 

해석방법(예시)

C++에서 이름 맹글링(name mangling)된 심볼(symbol)의 예시로 해석하는 방법을 설명합니다.

_ZNSt10unique_ptrIN8facebook7graphql3ast4NodeESt14default_deleteIS3_EEC1IS5_vEEPS3_

 

이 문자열은 std::unique_ptr 템플릿 클래스의 생성자를 나타냅니다.

 

_ZN: 이 부분은 C++ 이름 맹글링의 시작을 나타냅니다.
St: std 네임스페이스를 나타냅니다.
10unique_ptr: std::unique_ptr 템플릿 클래스를 나타냅니다.
N8facebook: facebook 네임스페이스를 나타냅니다.
7graphql: graphql 네임스페이스를 나타냅니다.
3ast: ast 네임스페이스를 나타냅니다.
4Node: Node 클래스를 나타냅니다.
E: 템플릿 인자의 끝을 나타냅니다.
St: std 네임스페이스를 나타냅니다.
14default_delete: std::default_delete 템플릿 클래스를 나타냅니다.
IS3_EE: std::default_delete<Node> 타입의 템플릿 인자를 나타냅니다.
PS3_: 포인터를 나타내며, std::unique_ptr<Node> 타입의 생성자를 나타냅니다.


이렇게 이름 맹글링된 심볼은 컴파일된 코드에서 함수나 클래스를 찾는 데 사용되며, 보통 사용자가 직접 다루지 않습니다. C++에서는 컴파일된 코드 간에 이러한 이름 맹글링 규칙을 따라야 하므로, 링크 단계에서 올바르게 연결될 수 있습니다.

 

C++ 맹글러는 C++ 컴파일러가 함수, 클래스, 변수 등의 이름을 고유한 문자열로 변환하는 과정을 말합니다. 이 과정을 "이름 맹글링"이라고 합니다. 이름 맹글링은 함수 오버로딩과 네임스페이스 등을 지원하며, 링커가 올바른 심볼을 찾을 수 있게 해줍니다.

 

반응형

댓글