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
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
HTTP File Upload using C/C++ (0) | 2021.07.16 |
---|---|
C++에서 띄어쓰기 포함 한 줄 그대로 받기 (0) | 2018.10.14 |
Visual Studio 64bit inline asm (0) | 2018.08.23 |
VirtualAllocEx Error 487 (0) | 2018.01.25 |
openssl socket C/C++ example (0) | 2017.10.31 |
유닉스 crypt 함수 (0) | 2017.05.29 |
printf 덮어 쓰기 (0) | 2016.11.09 |
연산자 오버라이딩, sort, 생성자 (2) | 2015.06.07 |
c++ 연산자 오버로딩 (0) | 2014.10.29 |
C++ mysql 연동 (0) | 2014.09.23 |
댓글