c++ 클래스 맴버함수의 메모리 위치와 작동 방식

조회수 2375회

C++맴버함수는 어디에 어떻게 위치합니까?

일단 제 개인적인 추측으로는,

  1. 복수개의 클래스 오브젝트를 생성한다 해도, 그 클래스의 맴버변수들은 복수개의 영역을 설정하여 자신이 선언된 방식에 걸맞는 위치(맴버변수가 모두 0일 경우 bss, static으로 선언되었을 경우 data 등)를 가지게 될 것 같습니다.

  2. 복수개의 클래스 오브젝트를 생성한다 해도, 맴버 함수들이 위치까지 복수개를 생성하지는 않을 것 입니다. 아마 맴버함수 Func는 Func(클래스오브젝트주소,변수 A, 변수 B....)식으로 우리가 보지 못하는 클래스 오브젝트의 주소를 넘겨 받아서 여러 오브젝트의 동일한 맴버함수는 하나의 함수만이 구현되어 있을 것 입니다.

  3. 저런 맴버함수의 위치는..... 아마 STATIC 오브젝트이든 어떤 오브젝트이든 가져다 쓸 수 있어야 하니까, 데이터 영역에 들어가서 대기하고 있을 것 같습니다.

이 정도로 추측하고 있는데, 어디까지 맞을까요? 혹은 이런 구현에 관한 정보를 얻을 수 있는 링크글이라도 주시면 감사하겠습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    리버스 엔지니어링을 공부해보면 원하시는 내용을 학습할 수 있습니다.

    어차피 함수라고 해봐야 메모리 주소일 뿐이고 스택에 파라미터를 넣고 call 로 호출하게 됩니다.

    push    ebp
    mov     ebp, esp
    

    로 스택프레임을 만드는데 이것을 보고 함수의 시작이구나 하고 예측이 가능합니다.

    c++ 의 경우는 virtual 선언이 있으므로 vtable 이라는 것을 참고하여 함수 주소를 얻기도 합니다.

    윈도우 pe 파일 기준으로 실제 함수들의 코드는 text 섹션에 저장됩니다.

    전역 변수, 상수(문자열등)등은 data 섹션에 저장되고 이미지같은 리소스는 resouce 섹션에 저장됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)