거북이처럼 천천히

구조체의 메모리 공간 크기 본문

C

구조체의 메모리 공간 크기

유로 청년 2024. 6. 20. 09:58

1. Padding byte

  • 시스템은 데이터를 빠르게 읽고, 쓰기 위해서 메모리 공간을 일정한 크기 단위로 접근한다.
  • 하지만, 구조체는 여러 종류의 자료형을 포함하기 때문에 일정한 크기 단위로 접근하여 데이터를 읽고, 쓰기 힘들다.
  • 이로 인해 구조체의 맴버를 빠르게 읽고, 쓰기 힘들다.
  • 따라서 구조체의 맴버를 일정한 크기 단위로 빠르게 읽고, 쓰기 위해 (= 일정한 크기 단위로 접근하기 쉽게 만들기 위해) 맴버들 사이에 Padding byte를 넣어준다.

 

 

2. Byte alignment

  • 구조체의 맴버를 읽고, 쓰는 과정에서 빠르게 수행하기 위해 메모리에서 일정한 크기를 갖고 접근하는데, 이 일정한 크기대로 읽기 편하게 구조체 맴버 간에 Padding byte를 넣는 과정을 Byte alignment라 한다.

 

 

3. Q) 메모리를 일정한 크기 단위를 갖고, 구조체의 맴버를 Read / Writer 한다고 했는데,  그 때의 일정한 크기 단위는 어떻게 되는가?

  • 구조체의 맴버를 빠르게 read / write 하기 위해 일정한 크기 단위로 접근하는데, 이때의 크기 단위는 구조체의 맴버 중 가장 큰 메모리 공간 크기를 갖는 자료형을 기준으로 삼는다.
  • 따라서 구조체가 갖는 메모리 공간의 크기는 단순히 각 맴버 자료형의 합이 아니라 시스템이 자동적으로 구조체 맴버 중 가장 큰 자료형을 기준으로 Padding byte를 적용한 메모리 공간 크기이다.

 

Padding byte를 사용하는 경우와 미사용한 경우

 

 

 

 

4. 예시를 통한 구조체의 메모리 공간의 크기

  • 아래 예시와 같이 student 구조체는 다양한 자료형을 맴버로 갖고있다.

student 구조체

  • student 구조체 중에서 메모리 공간을 크게 갖는 자료형은 double이다.
  • 따라서 double형을 기준으로 8byte단위로 구조체를 읽기 때문에 위 그림의 오른쪽처럼 메모리 공간을 갖게 되며, 따라서 구조체의 메모리 공간의 크기는 총 32byte가 된다.

 

 

 

  • 그러나, 임베디드 시스템처럼 메모리 공간이 한정적인 환경에서 메모리 공간 사용을 최소화하고 싶다.
  • 이 경우에는 "어떻게 구조체 맴버를 배치하느냐?"에 따라서 동일한 구조체 맴버를 갖더라도 다른 메모리 공간을 사용한다.

개선된 student 구조체

  • 이전 예시와 동일한 구조체 맴버를 갖지만, 개선된 student 구조체는 24byte 메모리 공간을 갖는다.
  • 8byte 기준 공간에 맞게 구조체 맴버를 배치했기 때문에 Padding byte가 최소화 되어 구조체 전체의 메모리 공간도 최소화 되었다는 것을 확인할 수 있다.

'C' 카테고리의 다른 글

C언어 잡다한 정보 정리 (1)  (0) 2024.07.04
공용체  (0) 2024.06.20
함수 포인터  (0) 2024.06.19
배열 포인터  (1) 2024.06.19
이중 포인터  (1) 2024.06.19