본문 바로가기
프로그래밍/C, C++

padding

by 즉흥 2018. 10. 17.
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

댓글