클래스의 메모리

phoenixKim·2021년 8월 19일
0

fundamental c++

목록 보기
7/14

메모리 구조는 4가지로 나뉘어진다.

  • 데이터
  • 코드
  • 스택

1. 데이터

: 전역변수나 static 변수 , static 함수

2. 코드

: 클래스 내의 멤버함수들이 저장된다.

3. 스택

: 지역변수, 매개변수

4. 힙

: 동적할당된 변수

클래스에서의 메모리

: 클래스의 모든 멤버 변수들은 선언한 순서에 따라서 메모리 위치 순서도 동일하다.
하지만 static변수와 멤버 함수는 클래스 메모리에 속하지는 않는다.

  • 멤버함수들은 code 영역에 위치한다.
  • static 변수들은 data 영역에 위치한다.

클래스의 멤버 변수에 접근 할때, 내부에서는 어떻게 동작되는 것일까?

: 해당 멤버 변수가 클래스의 메모리 시작 위치에서 얼마나 떨어져 있는지를 나타내는 오프셋 정보를 갖게 된다.
객체의 메모리 시작 위치를 구한 후, 각 멤버의 오프셋 정보를 통해
객체로부터 얼마나 떨어져 잇느지를 이용해 접근하는 것이다.

멤버에 접근하기 위해서는 멤버의 오프셋 정보를 이용해 접근한다.

멤버 변수 간의 크기

: 구조체 패딩처럼 크기가 가장 큰 멤버 변수의 크기의 배수만큼 할당된다.

클래스의 크기

  • 멤버 변수가 하나도 없는 클래스의 크기는 0이어야 하지만,
    클래스의 크기는 반드시 0보다 커야 한다는 c++원칙에 의해 1이 나온다.

  • 가상 함수가 있는 클래스는 4 바이트 혹은 8바이트 이상이다.

가상함수 존재할 경우

: 빌드시에 가상함수 테이블이 만들어지고, 객체 생성시 메모리 시작 주소값은
가상함수 포인터가 된다.

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보