Klärung der Diskrepanz zwischen den Datentypen „Long Double“ und „Double“
Trotz des allgemeinen Verständnisses, dass „Long Double“ normalerweise 8 belegt Bytes stößt der Poster auf ein eigenartiges Szenario, in dem „Long Double“ 12 Bytes auf seinem 32-Bit-Windows XP-System beansprucht. Um dieses Rätsel zu lösen, wollen wir uns mit den zugrunde liegenden Gründen befassen.
Laut Wikipedia entscheiden sich die meisten Compiler auf der x86-Architektur (einschließlich Windows XP) für die Implementierung von „long double“ als 80-Bit-Typ mit erweiterter Genauigkeit . Um jedoch eine effiziente Datenstrukturausrichtung aufrechtzuerhalten, kann dieser Typ in einigen Fällen als 12 Byte (oder sogar 16 Byte) gespeichert werden.
Darüber hinaus gehen bestimmte Compiler über den 80-Bit-Typ hinaus und implementieren „Long Double“. als 128-Bit-Format mit vierfacher Präzision. Dieses erweiterte Format ist nicht weit verbreitet und wird typischerweise in Software implementiert, anstatt nativ von der Hardware unterstützt zu werden.
Daher liegt die Antwort im Ermessen des Compilers. Während „Long Double“ im Allgemeinen dem 80-Bit-Typ mit erweiterter Genauigkeit entspricht, steht es Compilern frei, die Speicherkapazität zu Ausrichtungszwecken auf 12 oder sogar 16 Byte zu erweitern. Infolgedessen ermöglicht die erweiterte Speicherkapazität möglicherweise die Speicherung eines größeren Bereichs von Werten in „Long Double“ als in „Double“.
Das obige ist der detaillierte Inhalt vonWarum belegt „Long Double' auf meinem 32-Bit-Windows XP-System 12 Bytes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!