001
24.12.2009, 22:56 Uhr
0xdeadbeef
Gott (Operator)
|
Padding. Es ist durchaus gewöhnlich für Compiler, Structs zu Optimierungszwecken so zu packen, dass Variablen an Speicheradressen, die ein vielfaches der Wortgröße des Comupters sind, liegen. Das ist insbesondere im Zusammenhang mit SSE u.ä. von Interesse. Es kann also durchaus vorkommen, dass sich die Struct-Layouts im Speicher von Optimierungsstufe zu Optimierungsstufe unterscheiden - in diesem Fall vermutlich zwischen Debug- und Release-Modus.
Üblicherweise bieten die Compiler Programmierern, die sich auf diesen speziellen Fall undefinierten Verhaltens verlassen (im Grunde ist das schlicht ein Bug), eine Möglichkeit, ihr Verhalten zu kontrollieren. MSVC bietet etwa das pack-Pragma. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 24.12.2009 um 22:58 Uhr von 0xdeadbeef editiert. |