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
'개발자 면접 공부 > C-C++' 카테고리의 다른 글
extern 쓰는법 (0) | 2024.06.11 |
---|---|
Volatile (0) | 2024.04.29 |
C++ for문 증감문에 전위연산자 vs 후위연산자 속도 차이 (1) | 2024.04.03 |
NULL 포인터로 객체의 함수가 왜 호출되냐? (0) | 2024.03.26 |
VTable 위치 파악 (0) | 2024.03.25 |