[C++] 구조체와 클래스의 멤버 변수 메모리 구조

Structure

구조체나 클래스내에는 멤버변수를 선언할 수 있다. 중요한점은 이 멤버변수를 어떻게 선언하느냐에 따라 구조체나 클래스가 차지하는 메모리 공간이 달라진다는 점에 있다.

32bit OS를 기준으로 두개의 구조체를 다음과 같이 선언하겠다.

1
2
3
4
5
6
7
8
9
10
11
struct myStruct1{
char c1;
char c2;
int n1;
}

struct myStruct2{
char c1;
int n1;
char c2;
}

위의 두 구조체는 같은 타입과 개수의 멤버변수를 가지고 있지만 차지하는 메모리가 다르다. 두 구조체의 메모리 구조는 다음과 같다.

memory

위와 같이 myStruct2가 메모리 공간을 더욱 차지하고 있다. 그렇기 때문에 메모리 최적화를 생각해서 구조체나 클래스를 정의할 때 세심하게 작성해야 한다. 그냥 이런게 있구나 하고 알아두자.

추가적으로 구조체의 주소값은 구조체의 첫번째 멤버 변수의 주소값과 동일하다. 위와 같은 사항은 winsock과 같은 네트워크 프로그래밍 코드를 작성할 때 유용하게 사용된다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/21/Languages/Cplusplus/structure/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.