Właśnie teraz pomyślałem, że stackalloc
będzie właściwą drogą, ale zawiedzie. Co najważniejsze, teraz wiem, że był skazany na porażkę. Nie ma sposobu, aby zrobić to, co chcę zrobić.
To może być postrzegane przez przekształcenie pytanie:
Jak mogę utworzyć zarządzanego tablicę wokół „niebezpieczny” tablicy?
Ponieważ tablica zarządzana ma informacje nagłówkowe (ponieważ jest to klasa wokół uchwytu pamięci), wymaga więcej miejsca w pamięci niż sama tablica. Tak więc odpowiedź brzmi:
Przydzielanie przestrzeni przed (i/lub po? W zależności od sposobu przechowywania tablic zarządzanych w pamięci) samej tablicy i umieszczanie zarządzanych informacji (długość, (itp.)) Wokół "niebezpiecznych "tablica.
Nie jest to łatwe, ponieważ zagwarantowanie wystarczających danych w całej tablicy jest w najlepszym wypadku niestabilne. W moim szczególnym przykładzie może być wystarczająco dużo miejsca, ponieważ zarządzany bajt [] jest przekazywany w znaczeniu, że istnieją dane wokół tablicy, ale twierdzenie, że te same dane są odpowiednie dla zarządzanego podwójnego [] jest co najmniej wątpliwe, ale większość prawdopodobnie błędne, a zmiana danych, aby była odpowiednia dla zarządzanego podwójnego [], jest nikczemna.
[EDIT]
Wygląda Marshal.Copy
jest do zrobienia tutaj. Utworzyć nową tablicę i niech marszałek skopiuj je (w nadziei, że będzie szybciej niż ja, albo, że być może w jakimś późniejszym terminie, będzie szybciej):
var ret = new double[_raw_data.Length/sizeof(double)];
System.Runtime.InteropServices.Marshal.Copy(new System.IntPtr(_pret), ret, 0, ret.Length);
Na ogół gdy ma do czynienia z Interop, ruchu naziemnego jest Twoja przyjacielu, do usług w System.Runtime.InteropServices.Marshal. Nie wiem jednak, czego konkretnie potrzebujesz do korzystania z tablic. Możesz jednak uzyskać dostęp do tablic z arytmetyką wskaźnika. Może to wskazuje na właściwy kierunek. – OregonGhost
@daGhost - Z pewnością jestem świadomy dostępu do tablic ze wskaźnikami, ale będę musiał przyjrzeć się zestawianiu zarządzanej tablicy. Dzięki. –
@Limited Thing (Proszę nie nazywać mnie daGhost ponownie): Jeśli możesz uzyskać dostęp do elementów tablicy za pomocą wskaźników, możesz skopiować wartości do zarządzanej tablicy. – OregonGhost