2015-03-02 2 views
6

Ich würde gerne sehen, wie das C# -Array in Computerspeicher gelegt wird.Wie sehen Sie, wie ein C# -Array im Speicher abgelegt wird?

Was ich gerne sehen würde, ist hauptsächlich zwei Spalten eins mit Adressen zweitens mit Array-Elementen. Ist es möglich?

Ich möchte mit 1D-Array beginnen, aber dann möchte ich beobachten, wie mehrdimensionale Arrays gelegt werden.

Frage

Wie kann ich es über Visual Studio sehen?

+0

Wie Dinge in .NET gespeichert werden, ist ein Implementierungsdetail - dh Sie können einen Unterschied zwischen der CLR und Mono oder sogar zwischen verschiedenen Versionen von ihnen finden. Wahrscheinlich nicht, aber es ist möglich. Als .NET-Entwickler müssen Sie sich im Allgemeinen auch nicht darum kümmern - aus welchem ​​Grund versuchen Sie es herauszufinden? –

+2

Warum wird diese Frage geschlossen? es ist eine Frage, die jeder .net Entwickler kennen muss –

+0

Ich interessiere mich für Manipulation auf mehrdimensionalen Arrays. Diese Frage ist nur, um zu wissen, wie man die Grundlagen überprüft, bevor ich in mehrdimensionale Arrays eintauche. Ich kann mir keine bessere/einfachere Formulierung dieser Frage vorstellen. Danke Hans für eine sehr gute Antwort. – user1146081

Antwort

14

Sie können den Visual Studio-Debugger verwenden, um das Array-Layout anzuzeigen. Ein einfaches Beispiel:

static void Main(string[] args) { 
     int[] arr = { 1, 2, 3 }; 
     Console.ReadLine(); // Breakpoint here 
    } 

Verwenden Sie Projekt + Eigenschaften, Registerkarte Erstellen, Plattform target = x86. Setzen Sie einen Haltepunkt in der angegebenen Zeile, drücken Sie F5, wenn es auftrifft, verwenden Sie Debug + Windows + Memory + Memory 1. Geben Sie arr in das Feld Adresse ein. Klicken Sie mit der rechten Maustaste auf das Fenster und wählen Sie "4 byte Integer". Sieht wie folgt aus:

enter image description here

Das erste Wort der „Griff“ ist, dessen Wert zufällig ist, ignorieren es einfach. Sie können zweifellos den Rest erraten, Sie sehen das Array Länge und die Array-Elemente.

+0

Hans, ein Kommentator in der ursprünglichen Frage sagte: "_Wie Dinge in Speicher in .NET gespeichert werden, ist ein Implementierungsdetail_", bedeutet es, dass ein Array _can_ in Arbeitsspeicher in einer nicht sequentiellen Speicherzellen gespeichert werden kann? –

+2

Hmm, es ist ein "Implementierungsdetail", wenn Sie nicht wissen, wie es implementiert ist. Array-Elemente werden immer nacheinander gespeichert. –

0

Sie können WinDbg mit Sos oder Psscor-Erweiterungen verwenden.

Verwandte Themen