2010-07-07 5 views

답변

11

일반적으로 데이터가 올바르게 정렬되도록하는 패딩 바이트입니다. 예를 들어 :

struct x { 
    int a;  // four bytes 
    char b; // one byte 
       // three bytes slack 
    int c;  // four bytes 
} xx; 

는 정확한 경계에 정렬 c를 얻을 수 bc 사이의 여유 바이트 아마있을 것이다.

sizeif(xx)이 무엇인지 확인하여 확인할 수 있습니다 (구현에 따라 다르지만 위의 경우 12 개).

일부 아키텍처는 4 바이트 경계에서 정렬되지 않은 4 바이트 값을 사용해야하는 경우 느리게 실행됩니다. 일부 아키텍처에서는 모두에 예외를 생성하지 않고 대신 예외를 생성합니다.

+0

, Y하지 & B 사이 . int는 2 바이트이고 char 1 바이트는 얼마나 많은 슬랙 바이트가 크기인지를 나타냅니다. – mohit

+0

@mohit, 아마도 a와 b 사이에 있지 않을 것입니다. 왜냐하면 char은 1 바이트 경계에 정렬 될 가능성이 큽니다. int가 2 바이트 인 경우 b 다음에 슬랙이 1 바이트 만있을 것입니다. – paxdiablo

+0

@pax 고맙습니다. – mohit

2
struct student 
{ 
    char a;//it takes 8 byte 
    char b; 
    char c; 
    char d; 
    int e; 
}; 

struct student1; 
{ 
    char a; 
    int b; 
    char c;//it takes 12 byte(suppose sizeof(int)=4; 
} 

학생으로 취급된다

____________________ 
|char|char|char|char| // one byte for each char so there is no slack=4byte 
|____|____|____|____| 
____________________ 
|int | * | * |* | // int takes for byte;=4byte total space is 4+4=8; 
|____|____|____|____| 

및 student1 같이 처리된다 : 예에만 B 및 C 사이

____________________ 
|char| s |s | s | // one byte for char 
|____|____|____|____| // s indicates a slack byte..=4byte 
____________________ 
|int |* |* |* | //int takes four bytes;=4byte 
|____|____|____|____| 
___________________ 
|char| s |s | s | // one byte for char 
|____|____|____|____| // s indicates a slack byte..=4byte 
+0

StackOverflow에 오신 것을 환영합니다. [코드 형식 지침] (http://stackoverflow.com/editing-help#code)을 검토하십시오. 고맙습니다 :-) –