'long double'과 'double' 데이터 유형의 불일치를 명확히 합니다.
'long double'이 일반적으로 8을 차지한다는 일반적인 이해에도 불구하고 바이트에서 포스터는 'long double'이 32비트 Windows XP 시스템에서 12바이트를 요구하는 특이한 시나리오에 직면했습니다. 이 수수께끼를 풀기 위해 근본적인 이유를 파헤쳐 보겠습니다.
Wikipedia에 따르면 x86 아키텍처(Windows XP 포함)에서 대부분의 컴파일러는 'long double'을 80비트 확장 정밀도 유형으로 구현하는 것을 선택합니다. . 그러나 효율적인 데이터 구조 정렬을 유지하기 위해 이 유형은 경우에 따라 12바이트(또는 심지어 16바이트)로 저장될 수 있습니다.
또한 일부 컴파일러는 80비트 유형을 넘어서 'long double'을 구현합니다. 128비트 4중 정밀도 형식입니다. 이 고급 형식은 널리 채택되지 않았으며 일반적으로 하드웨어에서 기본적으로 지원되기보다는 소프트웨어에서 구현됩니다.
따라서 대답은 컴파일러의 재량에 달려 있습니다. 'long double'은 일반적으로 80비트 확장 정밀도 유형에 맞춰 정렬되지만 컴파일러는 정렬 목적을 위해 저장 용량을 12바이트 또는 심지어 16바이트까지 자유롭게 확장할 수 있습니다. 결과적으로 확장된 저장 용량을 통해 'double'에 비해 'long double'에 더 넓은 범위의 값을 저장할 수 있습니다.
위 내용은 내 32비트 Windows XP 시스템에서 'long double'이 12바이트를 차지하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!