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) 이라는 전처리문이 있습니다 ^^
인텔 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) 이라는 전처리문이 있습니다 ^^