|
|
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)
| |