Насколько константная функция быстрее обычной, если быстрее вообще?

ScopteRectuS, Скорее его там нет, это просто свойство интерпретатора, как и тип nothing, который объявить нельзя, так вероятно и constant - просто дает понять интерпретатору что эту переменную вынести в отдельное место, так же проверить код- нет ли операции присвоение этой переменной.
Если есть - выдать ошибку. Обращение к переменной медленнее обращение к конкретному значению, указанному в месте использования.
call CreateUnit( pl, 'hpea', x, y, bj_unitFacing) медленнее call CreateUnit( pl, 'hpea', x, y, 270.00 ).
Потому что движок сначала ищет переменную, потом берет из нее значение, иначе сразу вводит значение.
т.к есть макросы, дефайны, всякие фитчи тулов векса по замене констант, это все нафиг никому не упало. Софт все сделает за вас.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
вас должно заботить не то, быстрее ли такая функция или медленнее, а оптимизация узких мест, вот где важна скорость выполнения. не в ту сторону смотрите
DracoL1ch:
да едва ли это имеет вообще значение
21
Hate:
вас должно заботить не то, быстрее ли такая функция или медленнее, а оптимизация узких мест, вот где важна скорость выполнения. не в ту сторону смотрите
Я про это и думал. Ведь можно сделать функцию константной, которая вызывается таймером с малым периодом.
code
	function IsUnitAlive takes unit whichUnit returns boolean
		return not ( IsUnitType( whichUnit, UNIT_TYPE_DEAD ) or ( GetUnitTypeId( whichUnit ) == 0 ) )
	endfunction
	
	function TimerCallback takes nothing returns nothing
	  	...
		if ( IsUnitAlive( unit ) ) then
			...
		endif
		...
	endfunction

	function Start takes nothing returns nothing
		call TimerStart( CreateTimer( ), 0.03125, true, function TimerCallback )
	endfunction 
Вот что я имел ввиду.
22
а не проше булевой ставить при инизиалицазии а потом уже его проверять
16
а ты пробовал? логика говорит, что constant функция всегда возвращает константу и не может работать с параметрами :)
20
Ускорение достигается за счет расположения функции выше по коду, чем остальные, ЕМНИП
26
Вот что я имел ввиду.
таким образом вы наоборот сужаете горлышко
пример
function TimerCallback takes nothing returns nothing
	  	...
		if  ( IsUnitType( Unit, UNIT_TYPE_DEAD ) or ( GetUnitTypeId( Unit ) == 0) then
		else
			...
		endif
		...
	endfunction
21
Hate, Вы акцентируете внимание совсем на другое. Это понятно, что лучше вставить код из самой функции, вместо его вызова (как Вы и написали).
Я же хотел обратить Ваше внимание не на это, a на саму функцию IsUnitAlive( ) и на ускорение кода, если сделать её константной.
То есть Ваш ответ должен быть:
  • ускорения не будет совсем
  • ...
  • ускорение будет, но очень маленькое, что даже можно это не учитывать
  • ...
  • ускорение будет достаточно хорошим и функцию стоит сделать константной.
30
constant function is a function whose (output) value is the same for every input value

Кажется, это не та функциональность, которая требуется.

Ещё можно предварительно пробовать, а не задавать превентивные вопросы.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.