개발자 면접 공부/C-C++
네임 맹글링
chogyujin
2024. 4. 14. 19:59
728x90
1. 개요
오늘은 네임 맹글링에 대해 알아보도록 하겠습니다.
2. 네임 맹글링
컴파일러들은 컴파일을 할때 다른곳에서 접근할수 있도록 심볼을 만드는 작업을 합니다.
여기서 함수를 심볼로 만들때 심볼이름을 함수이름 그대로 생성하는 C 컴파일러와 달리 C++컴파일러들은 각각 정해진 규칙에 따라 심볼이름을 변경하여 생성합니다.
이러한 작업을 네임 맹글링이라고 하며 C와 달리 C++에서 오버로딩을 사용할수있는 이유가 됩니다.
실제로 코드로 설명해 드리겠습니다.
#include<iostream>
using namespace std;
void test()
{
cout << "Test" << endl;
}
int main()
{
test();
return 0;
}
이러한 코드가 있을때 과연 맹글링을 어떻게 하고 있을까요?
결과
readelf 명령어를 사용하여 확인해보면 실제로 C로 컴파일한 파일은 test 라는 이름으로 심볼이 생성되었고 C++로 컴파일한 파일은 _Z4testv 라는 이름으로 심볼이 생성된걸 확인할 수 있습니다.
3. Ref
[C++] extern "C"와 네임 맹글링
extern "C"와 네임 맹글링 오픈소스같은 곳에 보면 extern "C"라는 문법이 종종 보이는데 처음에 보면 이게 뭐하는거지 C로 컴파일 해준다는건가? 아니면 C문법으로 바꾸어 쓰라는건가? 라고 의문이
rurustory.com