Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > dimarik

Оценить эту запись

Необъяснимые memory allocation на строгих проверках.

Запись от dimarik размещена 05.08.2013 в 12:32
Обновил(-а) dimarik 07.08.2013 в 13:04

Недавно обнаружил забавную особенность. Если использовать строгую проверку (stricte quals "===" или "!==") при сравнении двух Number, и если один из операндов не является целым числом, то происходит выделение памяти (memory allocation), примерно 8 байтов на одну проверку. Строгое сравнение остальных типов данных не вызывает лишнее выделение памяти.

GC лишнюю память, конечно, очищает, но на выделение и очистку уходит драгоценное время.

В байткоде обычное и строгое сравнение различаются одним опкодом: equals (00ABh) заменяется на strictequals (00ACh).

Тестировал на mxmlc из 4.6.0 FlexSDK и ASC 2.0 из 3.7 AIRSDK компиляторах с опцией -swf-version 20.

Код теста.

Код AS3:
package
{
 
import flash.display.Sprite;
import flash.events.Event;
 
public class MemoryAllocationOnStrictEqualsTest extends Sprite
{
 
	public function MemoryAllocationOnStrictEqualsTest() {
		super();		
		super.addEventListener(flash.events.Event.ENTER_FRAME, this.handler_enterFrame);
	}
 
	private function handler_enterFrame(event:Event):void {
		//var a:Number = 1.0; // нет выделения памяти
		var a:Number = 1.1;   // есть выделение памяти
 
		for (var i:uint; i < 5000; ++i)
			if (a === 2.0) {}
 
	}
 
}
}
Всего комментариев 4

Комментарии

Старый 05.08.2013 19:26 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Интересненько, спасибо.
Старый 06.08.2013 10:44 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
8 килобайт - весьма жирно.
Что-ж там такое происходит?
Старый 07.08.2013 10:33 alatar вне форума
alatar
 
Аватар для alatar
Старый 07.08.2013 13:04 dimarik вне форума
dimarik
 
Аватар для dimarik
FlashRus, это моя неприятная ошибка на порядок. 8 байтов же!
 

 


Часовой пояс GMT +4, время: 15:05.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.