Difference between revisions of "Talk:Optimizing Plugins (AMX Mod X Scripting)"
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | Let's say i have Float:{233.594378, 345.634256, 1234.756464} array and i need reindex it two times. Two example: | ||
+ | <pawn>if (array[0] > some_float_variable) | ||
+ | x = 1.2 + array[0]</pawn> | ||
+ | or | ||
+ | <pawn>y = array[1] * array[1]</pawn> | ||
+ | Would it be more efficient (in fact)? | ||
+ | <pawn>new Float:temp = array[0] | ||
+ | if (temp > some_float_variable) | ||
+ | x = 1.2 + temp</pawn> | ||
+ | or | ||
+ | <pawn>new Float:temp = array[1] | ||
+ | y = temp * temp</pawn>--[[User:VEN|VEN]] 08:32, 3 March 2006 (EST) | ||
+ | :The bottom two are more efficient. However, it only really matters if you're repeating this computation a lot. If this is a one-time computation it won't make a difference. -- [[User:BAILOPAN|BAILOPAN]] 18:25, 3 March 2006 (EST) | ||
+ | ---- | ||
+ | Regarding [[User:NiLuJe|NiLuJe]]'s change of '\0' to 0: while they are both the same, keeping the syntax in terms of characters would probably be better for people to understand when dealing with strings, so I reverted the changes back. | ||
+ | :Perhaps it should be changed to '^0'... by default we don't use \ for a backtick. This is probably what he meant to correct. -- [[User:BAILOPAN|BAILOPAN]] 18:55, 1 March 2006 (EST) | ||
+ | ::Ah, indeed, fixing that now --[[User:CyberMind|cybermind]] 02:39, 2 March 2006 (EST) | ||
+ | ---- | ||
+ | Is there evidence that when something is const it's faster? I think this might be to the contrary, as the compiler has to copy it into the heap first to ensure that it isn't modified. -- [[User:BAILOPAN|BAILOPAN]] 00:54, 1 February 2006 (EST) | ||
+ | |||
+ | :Whether or not const variables/arrays are copied to the heap depends on the situation: | ||
+ | |||
+ | :<tt>For a function that has an array argument with a default value, the compiler allocates space for | ||
+ | :the default array value on the heap. However, if the array argument (with a default value) is | ||
+ | :also const, the pawn compiler passes the default array directly (there is no need to make a copy | ||
+ | :on the heap here, as the function will not attempt to change the array argument and, thereby, | ||
+ | :overwrite the default value). | ||
+ | |||
+ | :The arguments of a function that has "variable arguments" (denoted with the ... operator, see | ||
+ | :the pawn booklet "The Language") are always passed by reference. For constants and expressions | ||
+ | :that are not lvalues, the compiler copies the values to a cell that is allocated from the heap, | ||
+ | :and it passes the address of the cell to the function.</tt> | ||
+ | :-Page 106 (PDF page 108) of "The Implentor's Guide" | ||
+ | |||
+ | :<tt>Function <i>insert</i> copies in the other direction and it does not change its function argument item. | ||
+ | :In such a case, it is advised to mark the function argument as "const". This helps the pawn parser | ||
+ | :to both check for errors and to generate better (more compact, quicker) code.</tt> | ||
+ | :-Page 21 (PDF page 23) of "The Language Guide" | ||
+ | :--[[User:CyberMind|cybermind]] 01:24, 1 February 2006 (EST) | ||
+ | <br /> | ||
+ | ::I see, thanks for the clarification. Twilight, I'd amend your part somewhat to mirror that. -- [[User:BAILOPAN|BAILOPAN]] 02:54, 1 February 2006 (EST) |
Latest revision as of 10:03, 10 September 2007
Let's say i have Float:{233.594378, 345.634256, 1234.756464} array and i need reindex it two times. Two example:
if (array[0] > some_float_variable) x = 1.2 + array[0]
or
y = array[1] * array[1]
Would it be more efficient (in fact)?
new Float:temp = array[0] if (temp > some_float_variable) x = 1.2 + temp
or
new Float:temp = array[1] y = temp * temp
--VEN 08:32, 3 March 2006 (EST)
- The bottom two are more efficient. However, it only really matters if you're repeating this computation a lot. If this is a one-time computation it won't make a difference. -- BAILOPAN 18:25, 3 March 2006 (EST)
Regarding NiLuJe's change of '\0' to 0: while they are both the same, keeping the syntax in terms of characters would probably be better for people to understand when dealing with strings, so I reverted the changes back.
- Perhaps it should be changed to '^0'... by default we don't use \ for a backtick. This is probably what he meant to correct. -- BAILOPAN 18:55, 1 March 2006 (EST)
- Ah, indeed, fixing that now --cybermind 02:39, 2 March 2006 (EST)
Is there evidence that when something is const it's faster? I think this might be to the contrary, as the compiler has to copy it into the heap first to ensure that it isn't modified. -- BAILOPAN 00:54, 1 February 2006 (EST)
- Whether or not const variables/arrays are copied to the heap depends on the situation:
- For a function that has an array argument with a default value, the compiler allocates space for
- the default array value on the heap. However, if the array argument (with a default value) is
- also const, the pawn compiler passes the default array directly (there is no need to make a copy
- on the heap here, as the function will not attempt to change the array argument and, thereby,
- overwrite the default value).
- The arguments of a function that has "variable arguments" (denoted with the ... operator, see
- the pawn booklet "The Language") are always passed by reference. For constants and expressions
- that are not lvalues, the compiler copies the values to a cell that is allocated from the heap,
- and it passes the address of the cell to the function.
- -Page 106 (PDF page 108) of "The Implentor's Guide"
- Function insert copies in the other direction and it does not change its function argument item.
- In such a case, it is advised to mark the function argument as "const". This helps the pawn parser
- to both check for errors and to generate better (more compact, quicker) code.
- -Page 21 (PDF page 23) of "The Language Guide"
- --cybermind 01:24, 1 February 2006 (EST)
- I see, thanks for the clarification. Twilight, I'd amend your part somewhat to mirror that. -- BAILOPAN 02:54, 1 February 2006 (EST)