으로 명확하지 않다, 나는 크기가 20 수 있어야한다고 생각하지만, 왜 컴파일러가 16에서 d
를 정렬 할 수 있습니다 (24)SIZEOF 구조체도 다음과 같은 구조체에 패딩
class X {
unsigned int a;
unsigned int b;
double c;
unsigned int d;
};
를 밝혀오고 20 바이트?
으로 명확하지 않다, 나는 크기가 20 수 있어야한다고 생각하지만, 왜 컴파일러가 16에서 d
를 정렬 할 수 있습니다 (24)SIZEOF 구조체도 다음과 같은 구조체에 패딩
class X {
unsigned int a;
unsigned int b;
double c;
unsigned int d;
};
를 밝혀오고 20 바이트?
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
의 끝은 개체의 끝이 아닙니다.
확인을 지정해야합니다 .. 덕분에 같은 구조체에 대해 20 크기를 만들 수있는 방법이 있습니까? – user3651312
더 자세히 설명하는 편집을 참조하십시오. – Keith
아니요, "저장 공간을 줄이기 위해 순서를 바꿀 수 있습니까?"라는 뜻이라면 어떻게 보이지 않습니다. – Keith
이와 같은 POD 구조체에서 struct
의 주소는 첫 번째 요소의 주소입니다. 크기는 X[]
유형의 배열의 연속 요소 사이의 메모리에서의 거리입니다. double
을 가상 배열의 두 번째 요소에 맞추려면 첫 번째 int
과 전체 struct
을 double
과 동일한 엄격 성으로 정렬해야합니다. 이렇게하려면 끝에 패딩이 필요합니다.
실행중인 플랫폼은 무엇입니까? 내 우분투 컴퓨터에서 그것은 내게 20 출력만을주고있다 !! sizeof unsigned int가 4이고 double이 8이고 출력이 내 컴퓨터의 인 이유는입니다 !! 이것은 하드웨어마다 다릅니다!
방정식은 무엇입니까? – user2485710
당신은 환경 – tristan