![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 223
|
Провёл небольшое исследование.
1. Что лучше: int или uint, и почему вообще между ними есть разница. 2. Что лучше: i+=1 или i++. Исследование проводилось следующим образом. Нижеописанный класс был откомпилирован с помощью командного компилятора из Flex SDK (надо отметить, что компилятор Flash CS3 выдаёт те же результаты). Затем полученный .swf был декомпилирован с помощью abcdump из проекта Tamarin. package {
public class Test {
private var a:int;
private var b:uint;
private function int_field():void {
a=0;
a++;
a+=1;
}
private function uint_field():void {
b=0;
b++;
b+=1;
}
private function int_local():void {
var c:int;
c=0;
c++;
c+=1;
}
private function uint_local():void {
var d:uint;
d=0;
d++;
d+=1;
}
}
}
Вот так выглядит присвоение x = 0: Поле int: Поле uint: Локальная int: Локальная uint: Вот так выглядит i++: Поле int: findpropstrict private::a dup setlocal1 getproperty private::a increment_i setlocal2 getlocal1 getlocal2 setproperty private::a kill 2 kill 1 findpropstrict private::b dup setlocal1 getproperty private::b increment setlocal2 getlocal1 getlocal2 setproperty private::b kill 2 kill 1 Локальная uint: Вот так выглядит i+=1: Поле int: Поле uint: Локальная int: Локальная uint: Выводы: 1. Для полей нет разницы между int и uint (кроме области допустимых значений, разумеется). 2. При работе с локальными переменными типа uint часто используется инструкция конвертации convert_u, которая хоть и не значительно, но тем не менее может снизить произодительность. convert_i тоже иногда используется, но реже. 3. При работе с полями объекта выражение i+=1 компилируется в гораздо меньшее количество инструкций, чем i++ и выполняется значительно быстрее. 4. Наиболее быстрым выражением является i++ если i - это локальная переменная типа int. В этом случае выражение компилируется всего в одну инструкцию AVM2. Если i типа uint, то получается уже 4 инструкции. Последний раз редактировалось WindWalker; 07.03.2008 в 04:21. |
![]() |
Часовой пояс GMT +4, время: 14:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|