2012-03-12 4 views
0

임 대 없음 "그"C에 새로운하지만 어떤 사람이 하나를 가르치 려하시기 바랍니다 수 : 4과 1SIZEOF 구조체를 sizeof 유형

typedef struct 
{ 
    int a; 
    unsigned char b; 
} test 

printf("%d\n", sizeof(test)); 

인쇄 (8) 예상대로

printf("%d %d\n", sizeof(int), sizeof(unsigned char)); 

인쇄 ... 정말 혼란 스러워요!

+2

http://en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding – Mysticial

답변

1

"alignment"이라고합니다. struct에는 패딩 처리가되어 있습니다. "pack"(다른 컴파일러는 어떤 유형을 압축해야하는지 정의하는 다른 방법이 있습니다), 정렬되지는 않지만 런타임 데이터 액세스 문제가있을 수 있습니다.

+0

성능 최적화를 위해 크기를 최적화하거나 컴파일러 기본값을 사용하려면 항상 1 바이트로 데이터를 압축하는 것이 좋습니다. – McBob

+0

@McBob, 반대로, 당신이 필요로하고 당신이하고있는 일을 정확히 알고 있지 않다면 결코 포장하지 마십시오. 컴파일러는 시스템 기본값을 사용하여 무시하면 성능이 저하되고 일부 시스템에서는 충돌이 발생할 수 있습니다. – littleadv

+0

임 네트워크 프로토콜에서 작동하고 각 프로토콜 명령의 헤더 크기가 정적이어야합니다.이 경우 모든 플랫폼에서 크기가 동일하게 유지되어야합니다. 따라서이 경우 헤더 구조에 맞게 포장해야합니다. – McBob