2016-07-22 16 views
-3

Wie ich weiß, speichert C++ Array, indem es 2D-Array-Werte auf einen Speicherblock (kontinuierlicher virtueller Speicher?), Die schnell für den Zugriff auf den Wert nach Index sind.Wie C#/Java speichert 2D-Array, ist es anders mit C++?

Ich kam diese Frage nach dem Lesen dieser, "mit geschachtelten Array zum Speichern von 2D-Gitter ist effizient in C/C++, aber in Java oder anderen Speicher-verwalteten Sprachen, so dass Sie tatsächlich eine Reihe von Zeilen, wo jeder element ist eine Referenz auf das Array von Spalten, die möglicherweise nicht so speicherfreundlich sind, wie Sie möchten ".

Bedeutet "ein Verweis auf das Array von Spalten", dass sie tatsächlich in vielen kleinen Blöcken im Speicher gespeichert sind?

aktualisieren

Es sollte meine Frage: „Wenn Java Speicher 2D-Array auf viele kleine Blöcke, wie diese einfach für‚Speicher-Management‘ist“?

+2

Wer das geschrieben hat, denkt wahrscheinlich an ein 'int [] []', das in der Tat ein Array von Arrays ist. Das ist alles, was es in Java gibt, aber in C# gibt es * auch * ein 'int [,]', das ein rechteckiges Array ist - ein einzelnes Stück zusammenhängenden Speichers. –

+0

Bedeutet "ein Verweis auf das Array von Spalten", dass sie tatsächlich in vielen kleinen Blöcken im Speicher gespeichert sind? - ** Ja ** (in Java), Aber was sind die Vor- und Nachteile hier? - Bitte verfeinern Sie Ihre Frage, da sie nur nach Meinungen ohne eine bestimmte Richtung fragt, die für SO nicht geeignet ist. –

+0

Nein, es bedeutet, dass es in Java keine "echten" 2D-Arrays gibt (und vielleicht auch C#). Java kann stattdessen Arrays von Arrays haben, wobei jeder Index von Array 1 (die Zeilen) selbst ein Array ist (die Spalten). Das bedeutet auch, dass die Spalten gezackt sein können. – Tom

Antwort

1

In einer MxN-Matrix hat es M Referenzen für N-Arrays. Und das ist der Grund, dass Sie in C die zweite Dimension angeben müssen, wenn Sie ein Array als Funktionsargument übergeben möchten, und in Java nicht.

+0

Haben Sie Ihren Punkt. Vielen Dank! – milanow