Difference between revisions of "User:Omei Qunhua"
Jump to navigation
Jump to search
Omei Qunhua (talk | contribs) m (More results) |
Omei Qunhua (talk | contribs) (More sizing info) |
||
Line 1: | Line 1: | ||
'''Mono Code Size Measurements''' | '''Mono Code Size Measurements''' | ||
Results from my own tests in December 2012 | Results from my own tests in December 2012 | ||
1) Accessing a local integer variable | |||
'''Results ordered by size''' | |||
<pre> | <pre> | ||
Instruction ByteCode size | Instruction ByteCode size | ||
(x); 2 | (x); 2 | ||
Line 12: | Line 13: | ||
x=-x; 5 | x=-x; 5 | ||
++x; 6 | ++x; 6 | ||
x=x+x | x=x+x; 6 | ||
x=-~x | x=-~x; 6 equates to ++x | ||
x=~-x | x=~-x; 6 equates to --x | ||
x=x^x; 6 equates to x=0 | |||
x = !x; 7 | x = !x; 7 | ||
if (~x); 7 if (x != -1) | if (~x); 7 if (x != -1) | ||
Line 23: | Line 25: | ||
x+=1; 10 | x+=1; 10 | ||
x-=x; 10 | x-=x; 10 | ||
x=x=x; 10 | |||
x=x*2; 10 | x=x*2; 10 | ||
x*=2; 10 | x*=2; 10 | ||
Line 32: | Line 35: | ||
x=x<<1; 14 | x=x<<1; 14 | ||
</pre> | </pre> | ||
2) Accessing a local integer variable | |||
'''Results grouped by functionality''' | |||
<pre> | |||
Instruction Size Assumed operations | |||
negate x:- | |||
x=-x; 5 (load x, negate, store) | |||
x*=-1; 11 | |||
zeroise x:- | |||
x=0; 8 | |||
x-=x; x=x-x; 10 | |||
x=x^x; 6 (load x, xor with x, store) | |||
double x:- | |||
x=x*2; 10 | |||
x=x<<1; 14 | |||
x=x+x; 6 (load x, add x, store) | |||
increment x by 1 | |||
++x; 6 | |||
x++; 8 (because it has to preserve what it knows about x from before the increment) | |||
x=-~x; 6 (equates to ++x, not x++, so no size advantage) | |||
x+=1; 10 | |||
</pre> | |||
'''List storage Requirements in Mono''' | '''List storage Requirements in Mono''' | ||
These figures differ from those given in http://wiki.secondlife.com/wiki/LSL_Script_Memory | These figures differ from those given in http://wiki.secondlife.com/wiki/LSL_Script_Memory | ||
Maybe Mono has been tightened up a bit. | Maybe Mono has been tightened up a bit. | ||
Revision as of 09:11, 30 December 2012
Mono Code Size Measurements Results from my own tests in December 2012
1) Accessing a local integer variable
Results ordered by size
Instruction ByteCode size (x); 2 (~x); 3 x+x 4 x=~x; 5 x=-x; 5 ++x; 6 x=x+x; 6 x=-~x; 6 equates to ++x x=~-x; 6 equates to --x x=x^x; 6 equates to x=0 x = !x; 7 if (~x); 7 if (x != -1) x++; 8 x=0; 8 x=9; 8 x=-9; 9 Oh !! Does it load a +9 then negate it? x+=1; 10 x-=x; 10 x=x=x; 10 x=x*2; 10 x*=2; 10 if(!~x) 10 if (x == -1) x *= -1; 11 x<<1; 12 if(x<0); 13 if(x==-1); 14 x=x<<1; 14
2) Accessing a local integer variable
Results grouped by functionality
Instruction Size Assumed operations negate x:- x=-x; 5 (load x, negate, store) x*=-1; 11 zeroise x:- x=0; 8 x-=x; x=x-x; 10 x=x^x; 6 (load x, xor with x, store) double x:- x=x*2; 10 x=x<<1; 14 x=x+x; 6 (load x, add x, store) increment x by 1 ++x; 6 x++; 8 (because it has to preserve what it knows about x from before the increment) x=-~x; 6 (equates to ++x, not x++, so no size advantage) x+=1; 10
List storage Requirements in Mono
These figures differ from those given in http://wiki.secondlife.com/wiki/LSL_Script_Memory
Maybe Mono has been tightened up a bit.
Integer 16 bytes each Float 16 bytes each String 18 each plus 2 bytes per character Key (valid keys) (stored as keys) 102 bytes (!!) per key Key (valid keys) (stored as strings) 90 bytes per key (key) "" 30 bytes Vector 24 bytes each (correction, oops^^) Rotation 28 bytes each