Wiadomo, że Flash zachowuje się w bardzo nieprzewidywalny sposób, jeśli chodzi o manipulowanie danymi. Jestem ciekawy, że jeśli jest jakaś wydajność/pamięć korzyści z używania liczb zamiast ints poza wartościami, które wymagają precyzji. Słyszałem, że niektóre podstawowe operacje w programie Flash mogą konwertować wiele razy między tymi dwoma typami, aby rozwiązać wyrażenie. Słyszałem również, że Flash Runtime, pod maską, faktycznie mapuje ints do nieprecyzyjnych liczb/pęczków w czasie działania. Czy to wszystko prawda?Czy int jest zawsze szybszy niż Numbers/Floats w AS3?
Odpowiedz
Flash Runtime jest rzeczywiście ciemnym miejscem.
- Jak wspomniano AVM2 does convert big ints into Number.
- Ogólna liczba to rzeczywiste wartości.
- And there's more stuff about ints.
- Uty używane były wolno używane w pętli BUT NOW THEY ARE NOT (wyniki w tym artykule wydają się być kombinacją dziwnego generowania kodu bajtowego i optymalizacji JIT).
- Numery zajmują więcej miejsca w pamięci, ale jest to
nothing
w porównaniu do nawet jednego pliku JPEG. - Logicznie lepiej jest używać pętli w wersjach
uints
. - Liczby są falami zmiennoprzecinkowymi, które należy ostrożnie porównywać.
Jackson Dunstan wykonuje całkiem niezłe testy różnych konstrukcji języka AS3. Oczywiście zawsze dobrze jest sprawdzić wyniki samodzielnie. Z serii o wydajności 10,2 widać, że z każdą nową wersją Flash Playera optymalizują one coś, ale inne rzeczy mogą stać się wolniejsze: 123.
P.S. Ta odpowiedź może szybko się zestarzeć i równie dobrze można ją cytować za kilka lat, co oczywiście będzie błędne.
Nie otrzymujesz żadnej prawdziwej korzyści z wydajności z liczbą losową. Więc jeśli nie używasz zmiennej dla rzeczy takich jak indeksy pętli lub rzeczy, które wymagają dokładnych inkrementów, numer jest w porządku. W rzeczywistości liczba może być NaN, jeśli otrzymasz nieprawidłowy wynik, co jest przyjemną korzyścią.
Cóż, jednak * masz * dostęp do pamięci - int używa 32 bitów, liczba używa 64 bitów. – weltraumpirat
Również z twojego własnego źródła linku, to jest odpowiedź na seplulars: "' - - * *% "to wszystkie operacje numerowania. Jeśli używane są w int/uint, zostaną przekształcone na liczbę przez odtwarzacz Flash w tle i przekształcenie z powrotem do int/uint po zakończeniu operacji '| &^>><< > >>' (bitwize) zachowują typy int/uint w odtwarzaczu i są zoptymalizowane dla nich dla tych typów. " – weltraumpirat
weltraumpirat, musiałbyś użyć wielu zmiennych, aby dwubajtowa różnica między int i number była problemem, ale oczywiście masz rację. :) – Almo