프로그래밍에 관련된 가이드 문서를 읽던 중...
"LLVM에서 llvm-nm 툴을 이용하여 C++의 Mangled Name을 Demangled 할수 있다" 라는 말을 접하게 되었다.
하지만 아무리 읽어보아도 Mangled Name이 어떤 의미를 갖는지 잘 이해가 가지 않았다.
알아본 결과...
Mangled Name은 C와 C++ Linking 과정의 차이에서 알아볼 수 있었다.
- C는 Overloading을 지원하지 않는 언어이다. 따라서 함수를 단순히 '함수의 이름(Symbol)으로 구분'하여 Linking을 한다.
- C++은 Overloading을 지원하는 언어이다. 단순히 함수의 이름만으로 어떤 함수를 호출할지 '정확히 구분'할 수 없다. 함수의 이름과 더불어, Parameter의 종류, 개수의 정보도 포함시켜야 Linking시에 Linker가 적당한 함수를 묶어 준다. 이러한 Linkage(링크 규칙)를 'Mangled Name'이라고 부른다.
아직 탐험해보지 못한 신비한 세계가 많이 남아있는듯 하다.
참조: http://blog.naver.com/supsup5642/60156876656
'개발이야기 > C, C++' 카테고리의 다른 글
C언어 pthread 사용 방법 (0) | 2014.03.05 |
---|---|
포인터 배열 테스트 코드 (0) | 2012.08.07 |
C코드 메모리릭 잡기 (0) | 2012.07.18 |
부모 클래스의 기본생성자가 없을때 메모리 누수 현상 (2) | 2012.06.12 |
마방진 원리 및 문제 (4) | 2012.05.19 |