Doing/C&C++
Byte padding
YongArtist
2020. 9. 7. 22:16
cpp을 처음 공부하면서 C에 대한 내용도 다시 복습하고 있다.
구조체 부분을 학습하면서 구조체는 사용자 정의 타입으로 여러 데이터 타입을 하나의 타입으로 지정할 수 있다.
그러면 이 구조체는 메모리에 어떠한 구조로 저장되는지 궁금하다. (궁금하지 않더라고 알면 좋다.)
위 소스코드를 아래에서 메모리와 매칭된 그림을 확인할 수 있다.
컴파일러는 프로그램의 속도를 향상시키기 위해 구조체를 메모리에 할당할 때 바이트 패딩(Byte Padding) 규칙을 사용한다. 이 규칙은 구조체 멤버 변수 중 크기가 가장 큰 멤버 변수를 기준으로 나머지 멤버 변수를 할당한다.
위 그림에서 보면 char, int, double 타입이 선언된 것을 알 수 있는데 이 중 8byte를 가지는 duble의 크기가 가장 크므로 double과 동일한 크기에 8byte를 할당해서 나머지 char, int 타입을 할당한다.
8byte에 char(1byte), int(4byte)로 할당하면 남은 3byte가 바이트 패딩이 된다. 그러면 위의 구조체가 선언되었을 시, 총 16byte를 사용한다는 것을 알 수 있다.