2017-04-03 2 views
0

Dies ist der Code, den ich in x86 verwenden und x64C# Short, Byte dauert 4 Byte in x86

static unsafe void Main(string[] args) 
    { 
     short a = 4; 




     short b = 5; 


     short* x = &a; 
     short* y = &b; 

     Console.WriteLine((int)x); 
     Console.WriteLine((int)y); 


     Console.ReadLine(); 


    } 

für x86 Ich mag Antwort bin immer "xxxxx224 xxxxx220" für x64 i Antwort bin immer wie "XXXXX000 xxxxx002"

Warum ist der Short, Byte, Bool Punkt 4 Bytes in x86 und normal auf x64

+0

Sie erhalten nicht einmal das gleiche Klassenlayout. AFAIK the JIT kann frei wählen, was auch immer es hier gefällt. Auf einer Seite gibt es Ausrichtungsbedenken, auf der anderen Seite Größenbeschränkungen. Auch das 32-Bit-JIT und das 64-Bit-JIT sind vollständig separate Codeabschnitte. Sie müssen nicht gleich arbeiten. – Joey

+0

Was haben Sie außerdem von einer Antwort hier? Wenn Sie sich um das Speicherlayout kümmern, gibt es bessere Möglichkeiten, es zu steuern, z. mit Attributen für Strukturelemente. Wenn nicht, dann warum? – Joey

+0

Ich versuche zu lernen, wie die Dinge damit arbeiten. Ich konnte nicht lösen, warum 32 Bit JIT dies tut und 64 Bit JIT reagiert auf andere Weise. Gibt es einen bestimmten Grund dafür? – Pradeep

Antwort

1

, dass die Speicheradresse der kurzen Werte, die Sie ausgeben. Sie erhalten 32-Bit-Werte, da Ihr Programm vermutlich als 32-Bit-Anwendung kompiliert wurde.

+1

Ja, das ist die Speicheradresse. Also seine 4 Byte für einen Kurzschluss in 32 Bit und 2 Bytes in 64 Bit? – Pradeep

+0

Nein, in allen Fällen werden 4 Byte verwendet - es sei denn, Sie würden kompilieren, um auf 64-Bit zu laufen. Wenn man nur auf einem x64-Prozessor läuft, wird es keinen Unterschied machen, wie viel Speicher zugewiesen wird, er läuft immer noch unter einem 32-Bit-Emulator ("WOW64"). –

+0

Ja, Sir, aber warum kompilieren, um auf 64-Bit zu laufen, weist 2 Bytes für kurze und 4 Bytes während des Kompilierens zum Ausführen von 32-Bit zu. welcher Link fehlt mir. Ich konnte es nicht herausfinden – Pradeep