Вопрос не по самой кучи и там алгоритмах сборки мусора, а по специфики C# c++, как,
каким к примеру должен быть массив Heap.
Из байтов, int32-ов , int64? Типа машинных слов.
Как извлекать, и сохранять в него bool, byte, string, new byte[]
мгновенно?
Все мои идеи и реализации в
5-10 раз медленнее. А как это у JVM? Там же как раз своя независимая куча,
Вопрос. Как происходит извлечение BOOL, BYTE, DOUBLE ? Точнее сколько операций происходит?
Можно ли за 1 операцию из массива байтов, взять 4 байта и закинуть в int Одной операцией?
C точки зрения процессора легко. А как программно это сделать, без всяких
Неужели JVM или там V8 движки крутят вместо 1 операции по 10-30?
// извлечь int из byteHeap[];
int a = (((int)b[i])>>24) + (((int)b[i+1])>>16) + (((int)b[i+2] )>>8) + b[i+3]
// почему вообще моя реализация быстрее, чем кастомный BitConvert.ToInt32(arr,offset); в 1.5 раза
То есть 4 приведения типа, 3 суммирования, и еще 3 сдвига и еще 3 сложения в получении адреса. 13 операций.
Дизассемблер выполняет 32 операции.
А максимально быстрый способ. То есть линейный, int a = arrInt[i] . всего 7 инструкций.
По тестам кстати примерно в
7 раз и быстрее, простой копирования. int -> int, от byte[4]-> .Неужели ни как за это же время 4 байта в int закинуть?
Хотя же можно просто взять линейно и перевеcти эти 4 бита, они же рядом(правда там задом наперед иногда). Есть ли такие операции?
Если брать массив int [] heap по 4 байта слово. То тогда как хранить извлекать байты. То есть опять такое делать, что в 7-10 раз будет медленнее.
Но виртуальные машины. JVM, V8 они же примерно за такое же время работают как и система. Помню сравнивал.
То есть как у них это проблема реализована? , в разных исходниках я не нашел, или не понял
А это операция, извлечения типа из кучи, типа каждый раз будет. Как-то они из кучи мгновенно получают значения, а не через 10 >> сдвигов проворачивают.