Soft Ware/C 언어!!

구조체 패딩에 대해 알아 보겠습니다 ㅠㅠ

달려가보자 2012. 1. 27. 21:38
패딩이란 ....

 인텔 x86의 32비트 에서는 레지스터가 32비트로 이루워졌습니다 .

그래서 한번 메모리를 access 할려면  32 비트로 접근 하는게 빠르겠죠? ㅎㅎㅎ

그래서 구조체에서는 패딩이 이루워 집니다.

자 구조체를 선언해 보겠습니다.

struct List
{
     int Data ;
     char  a;
     double f;
     int  nData;
     double  b;
     short    c;
};

패딩이 안 이루워졌다고 전제 하에 메모리 크기는 4+1+8+4+8+2 이겠죠?

하지만 실제 메모리는 이렇게 안됩니다 .

가장 큰 비트를 기준으로 4비트씩 할당합니다 . 즉 여기서는 double 이 8비트임으로 8비트로 

설정 됩니다.

4+1+(빈공간 3)+8 +4+(빈공간 4)+8+ 2 로 이런식으로 이루워집니다 ^^

자 그럼 패딩에 대해서도 좀 아시겠죠? ㅎㅎㅎ

패딩을 없애기 위한 방법으로는 #pragma pack(1) 이라는 전처리문이 있습니다 ^^