Du scheinst irgendwie den Sinn und Zweck von .Net nicht wirklich begriffen zu haben. Sinn von Managed Code ist Sicherheit zu haben indem man (unter anderem) nicht direkt auf Speicher zugreift. Sobald man sowas tut (was nur mit FullTrust möglich ist) öffnet man Tür und Tor fur jegliche Manipulation und böse Auswirkungen von Programmfehlern, kommt den sehr effizienten .Net Speicheralgorithmen in die Quere und legt die raffinierten .Net Sicherheitsmechanismen wie CAS und JIT Verification lahm. Ausserdem programmiert man in höheren Sprachen wie Vb.Net meistens um sich eben nicht mit Speicherlayout und solchen Details zu beschäftigen. Marshal hat bestimmt interessante Methoden aber deren Verwendung ist auch für erfahrene Programmierer meistens transparent und uninteressant. .Net schafft eine Umgebung wo alles nicht immer ist wie es erscheint. Speicher für Objekte wird einfach linear alloziert im verfügbaren Speicher, und da dauernd unzählige Objekte angelegt und gelöscht werden bleibt selten etwas Freiraum nach einem bestimmten Objekt. Eine Funktion wie ReDim (was man ja kaum benutzen würde wenn man auf Geschwindigkeit ausgerichtet ist) wird Arrays auch nicht unbedingt ganz so vergössern wie man erwartet. Wenn man alle Möglichkeiten den Code für Geschwindigkeit zu optimieren ausschöpfen will gibt es Sprachen, die wessentlich besser geeignet sind als Vb.Net oder sonst eine .Net Sprache. Dass .Net wie die Mehrzahl der höheren Sprachen row-major verwendet kann man selber leicht prüfen mit solchem Code
Dim a(,) As Integer = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
Dim i, j As Integer
For i = 0 To 2
For j = 0 To 2
Debug.WriteLine("a(" & i.ToString() & ", " & j.ToString() & _
")=" & a(i, j).ToString())
Next
Next
Dim gch As GCHandle = GCHandle.Alloc(a, GCHandleType.Pinned)
Dim addr As IntPtr = gch.AddrOfPinnedObject()
For k As Integer = 0 To 32 Step 4
Debug.WriteLine(Marshal.ReadInt32(addr, k).ToString())
Next
gch.Free() Es ist vielleicht interessant auch zu schauen was nach ReDim im Speicher steht. Und wie schon hier gesagt, VB6 verwendet column-major, daher war es bei ReDim und mit traditioneller Speicherverwaltung etwas anders.
Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov |