Ilekroć przydzielić nową tablicę w języku C# zbezpośrednie inicjalizacji tablicy ze stałą wartością
new T[length]
wpisy tablicy są ustawione na domyślne T. To znaczy null
dla przypadku, T
jest typem odniesienia lub wynik domyślnego konstruktora T
, jeśli T
jest typem wartości.
W moim przypadku chcę zainicjować Int32
tablicę o wartości -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Więc po pamięci jest zarezerwowana na tablicy, CLR pętle nad nowo przydzielonej pamięci i ustawia wszystkie wpisy do default (int) = 0. Następnie mój kod ustawia wszystkie pozycje na -1.
To powoduje, że inicjalizacja jest zbędna. Czy JIT wykryje to i zaniedbuje inicjalizację do 0, a jeśli nie, czy istnieje sposób bezpośredniego zainicjowania części pamięci o wartości niestandardowej?
Odwołanie się do C# Array initialization - with non-default value, używanie Enumerable.Repeat(value, length).ToArray()
nie jest opcją, ponieważ Enumerable.ToArray
przydziela nową tablicę i kopiuje do niej później wartości.
Jeśli masz bajt array, następnie [P/Invoke mógłby pomóc] (http://stackoverflow.com/a/19060558/380331). Ale jeśli rozmiar elementu tablicy jest większy niż bajt (jak w twoim przypadku) - ta metoda nie pomoże. –