2014-05-19 1 views

답변

6

X의 배열에서 c이 8 바이트 경계에 정렬되도록 유지됩니다.

X x[2]; 

X[0]: 
0-3 unsigned int a 
4-7 unsigned int b 
8-15 double  c 
16-19 unsigned int d 
20-23 [PAD] 
X[1]: 
24-27 unsigned int a 
28-31 unsigned int b 
32-39 double  c 
40-43 unsigned int d 
44-47 [PAD] 

그래서 배열 요소 사이에 4 바이트의 패드가 필요하다는 것을 알 수 있습니다. 이것은 개체의 끝에 4 바이트를 추가하여 캡처됩니다. 두 번째 배열 요소가 20 위치에서 시작된 경우 x[1].c은 8 바이트 정렬되지 않았습니다.

결국 d은 예상대로 바이트 16에서 시작하지만 d의 끝은 개체의 끝이 아닙니다.

+0

확인을 지정해야합니다 .. 덕분에 같은 구조체에 대해 20 크기를 만들 수있는 방법이 있습니까? – user3651312

+0

더 자세히 설명하는 편집을 참조하십시오. – Keith

+0

아니요, "저장 공간을 줄이기 위해 순서를 바꿀 수 있습니까?"라는 뜻이라면 어떻게 보이지 않습니다. – Keith

1

이와 같은 POD 구조체에서 struct의 주소는 첫 번째 요소의 주소입니다. 크기는 X[] 유형의 배열의 연속 요소 사이의 메모리에서의 거리입니다. double을 가상 배열의 두 번째 요소에 맞추려면 첫 번째 int과 전체 structdouble과 동일한 엄격 성으로 정렬해야합니다. 이렇게하려면 끝에 패딩이 필요합니다.

0

실행중인 플랫폼은 무엇입니까? 내 우분투 컴퓨터에서 그것은 내게 20 출력만을주고있다 !! sizeof unsigned int가 4이고 double이 8이고 출력이 내 컴퓨터의 인 이유는입니다 !! 이것은 하드웨어마다 다릅니다!

관련 문제