프로그래밍/C, C++
padding
즉흥
2018. 10. 17. 21:36
728x90
반응형
다음과 같은 구조체와 그 사이즈를 출력하는 코드가 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> typedef struct test { char a; char b; int c; } test; int main() { test tmp = { 0, }; tmp.a = '1'; tmp.b = '2'; tmp.c = 3; printf("%d\n", sizeof(tmp)); return 0; } | cs |
char 변수 x2, int 변수 x1이지만 구조체의 사이즈는 6이 아니라 8이다.
하.. 이거 대학교 저학년 때 분명 숙지하고 있던건데 좀처럼 신경 안 쓰니 패딩의 개념을 까먹었다.
OS 별로, 혹은 프로그래머의 설정별로 다르지만 메모리 할당에는 패딩이라는 개념이 있다.
tmp 구조체가 할당된 메모리를 보면 아래와 같다.
4바이트씩 메모리를 관리(?)하기 때문에 char 변수 두 개 다음에 2바이트 패딩이 생겼다.
이거 때문에 정의한 구조체와 실제 할당된 구조체가 달라서 구조체 멤버를 포인터 참조할 때 에러가 날 수 있다!!
오늘 이거 때문에 삽질 좀 해서 정리.
728x90
반응형