게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
구조체 크기 및 바이트 패딩 관련.
게시물ID : programmer_4652짧은주소 복사하기
작성자 : 매직블럭
추천 : 0
조회수 : 503회
댓글수 : 5개
등록시간 : 2014/07/23 15:40:59
옵션
  • 본인삭제금지

안녕하세요 매직블럭입니다.

인터넷 끄적거리다 구조체의 크기 및 패딩에 대한 글을 보고 테스트를 한번 해봤는데요 

우선 실험에 사용한 소스코드는 아래와 같습니다.

  1. #include <stdio.h>
  2. #include <Windows.h>
  3.  
  4. struct TEST1
  5. {
  6.         char    c;
  7.         short   s;
  8.         int     i;
  9.         double  d;
  10. };
  11.  
  12. struct TEST2
  13. {
  14.         short   s;
  15.         int     i;
  16.         double  d;
  17.         char  c;
  18. };
  19.  
  20. #pragma pack(1)
  21. struct TEST3
  22. {
  23.         short   s;
  24.         int     i;
  25.         double  d;
  26.         char    c;
  27. };
  28. #pragma pack()
  29.  
  30. void main()
  31. {
  32.         TEST1 T;
  33.         TEST2 T2;
  34.         TEST3 T3;
  35.  
  36.         printf( "====== T ======\n" );
  37.         printf( "Sizeof(c) : %d\n", sizeof(T.c) );
  38.         printf( "Sizeof(s) : %d\n", sizeof(T.s) );
  39.         printf( "Sizeof(i) : %d\n", sizeof(T.i) );
  40.         printf( "Sizeof(d) : %d\n", sizeof(T.d) );
  41.         printf( "Sizeof(T) : %d\n", sizeof(T) );
  42.  
  43.         printf( "\n====== T2 ======\n" );
  44.         //printf( "Sizeof(c) : %d\n", sizeof(T2.c) );
  45.         printf( "Sizeof(s) : %d\n", sizeof(T2.s) );
  46.         printf( "Sizeof(i) : %d\n", sizeof(T2.i) );
  47.         printf( "Sizeof(d) : %d\n", sizeof(T2.d) );
  48.         printf( "Sizeof(T) : %d\n", sizeof(T2) );
  49.  
  50.         printf( "\n====== T3 ======\n" );
  51.         printf( "Sizeof(c) : %d\n", sizeof(T3.c) );
  52.         printf( "Sizeof(s) : %d\n", sizeof(T3.s) );
  53.         printf( "Sizeof(i) : %d\n", sizeof(T3.i) );
  54.         printf( "Sizeof(d) : %d\n", sizeof(T3.d) );
  55.         printf( "Sizeof(T) : %d\n", sizeof(T3) );
  56.  
  57.         system("pause");
  58. }

여기서 제가 궁금한게 구조체 TEST2 의 크기입니다.

저렇게 선언을 하면 20바이트 가 될거라고 생각했는데 막상 찍어보면 24바이트가 나오더라고요 

그래서 TEST2 구조체에서 char c; 이부분만 주석처리하고 다시 돌려보니 이번엔 16바이트가 나오네요 

크기가 이렇게 제가 생각한 것과 다른 이유가 무엇일까요..?

정리하려고 http://jangjy.tistory.com/135 여기에 적다가 발견하도 급당황.. 

왜그런지 파악도 안되고 고민하다 질문 합니다.

고수님들의 답변 기다리겠습니다. 감사합니다.
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호