구조체
#include <iostream>
struct My_struct
{
int a;
int i;
short b;
char c;
};
struct My_struct_2nd
{
int a : 5;
int i : 3;
short b : 7;
char c : 4;
};
int main(void)
{
struct My_struct s1;
struct My_struct_2nd s2;
s1.a = 10;
s1.b = 23;
s2.c = 'a';
printf("My_struct size : %d\n", sizeof(My_struct)); // 결과 12
printf("My_struct_2nd size : %d", sizeof(My_struct_2nd)); // 결과 8
return 0;
}
'구조체'는 여러 변수를 묶어서 하나의 자료형으로 사용할 수 있게 하는 형식입니다. 예시 코드에서 My_struct s1;를 선언하고 My_struct 구조체 안에 들어있는 a, b, c에 각각 값을 넣어준 것처럼 구조체를 선언하면 안에 있는 변수 모두를 사용할 수 있게 됩니다.
구조체의 메모리 크기는 특징이 있습니다. 처음에는 컴퓨터 환경에 따라 기본적인 메모리 크기를 결정합니다. 32 bit 환경이면 4 Byte, 64 bit 환경이면 8 Byte가 됩니다. 이 메모리 공간 안에 구조체 멤버로 선언된 변수들을 해당 변수의 메모리 크기만큼 할당합니다. 그러다가 기본 메모리 크기를 넘어서게 되면 선언된 변수 중에 가장 메모리 크기가 큰 자료형의 크기만큼 메모리 공간이 늘어납니다. 예시에서 My_struct 구조체의 메모리 크기가 12인 이유입니다.
비트 필드
'비트 필드'는 구조체의 멤버 변수의 메모리 크기를 원하는 비트 수만큼 설정할 수 있게 해 줍니다. 예시 코드에서 My_struct_2nd의 멤버 int 변수 a의 옆에 : 5로 되어 있는 부분이 비트 필드 관련 내용입니다. int 변수는 원래 32 bit지만 5bit만 사용하겠다고 설정한 것입니다. 이렇게 선언하면 해당 변수는 5비트 밖에 사용하지 못하므로 [ -16 ~ 15 ]의 범위를 가지는 변수가 됩니다. 실제 메모리 공간에도 영향을 줘서 My_struct와 My_struct_2nd의 멤버 변수는 같지만 두 구조체의 크기가 12 Byte와 8 Byte로 다른 이유가 이 때문입니다.
'C & C++' 카테고리의 다른 글
C/C++ 기초 - 열거체 ( Enumeration ), 공용체 ( Union ) (0) | 2021.10.31 |
---|---|
C/C++ 기초 - 변수 ( Variable ) (0) | 2021.10.17 |
C/C++ 기초 - 함수 ( Function ) (0) | 2021.10.17 |
C/C++ 기초 - 포인터 ( Pointer ) (0) | 2021.10.14 |
C/C++ 기초 - 배열 ( Array ) (0) | 2021.10.12 |