2014-11-03 13 views
0

두 개의 요소로 구성된 C 구조체가 있습니다. 구조체의 마지막 요소에 offsetof()를 입력하면 144가 표시되고 마지막 요소 인 sizeof()는 4가됩니다. 따라서 구조체의 크기가 148이라고 가정합니다. 그러나 구조체 자체에서 sizeof()를 실행하면 152의 값을 반환합니다. 오프셋에 대해 잘못 해석하고있는 것이 있습니까? 구조의 크기가 152 대신 148가되어야합니까? 바이트에 맞게 적용되는 패딩이 있습니까? (인한 패딩 아마도) I 14.구조체의 크기 대 구조체의 마지막 요소의 오프셋

Struct A{ 
// few elements 
}; 

Struct B{ 
Struct A; 
<type> C; 
<type> D; 
// few more elements 
}; 

소자 C는 (패딩이 적용되지 않기 때문에이있다) (148)의 오프셋으로 우분투에서 64 비트 플랫폼에서 실행하고 있지만, sizeof의 구조체 (A)는 152 따라서 memcpy가 수행 될 때, 요소 C에 할당 된 값은 제로가됩니다.

업데이트 : 그냥 확인 된 sizeof() 요소 C는 4 바이트이므로 148 번째 오프셋 바로 뒤에 포함됩니다.

+1

구조체의 sizeof가 각 멤버의 sizeof 합계와 같지 않은 이유는 무엇입니까? (http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct -equal-to-the-sum-of-each-member) –

+0

내가 뭘 찾고 있을지 모르지만 내 32 비트 exe는 문제를 일으키지 않는 것 같습니다. 그러나 64 비트는 않습니다. #pragma 설정을 더 자세히 살펴볼 것입니다. –

+0

마지막 멤버 이후의 패딩은 어떻게 문제가됩니까? 그것은 이유가 있습니다. –

답변

1

최소한 구조 전후에 패딩이 없습니다. 그러나 동일한 구조체 내에서 다른 데이터 유형을 사용하는 경우 때때로 성능을 위해 alignment이 추가됩니다. 이것은 컴파일러 설정이며 원하는 경우 비활성화 할 수 있습니다.