2012-03-01 13 views
8

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

14

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.

0

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ą.

+0

Cóż, jednak * masz * dostęp do pamięci - int używa 32 bitów, liczba używa 64 bitów. – weltraumpirat

+0

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

+0

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