Author: Vincent Diepeveen
Date: 13:17:52 09/15/01
Go up one level in this thread
On September 15, 2001 at 15:23:29, Bruce Moreland wrote: >On September 15, 2001 at 14:30:40, Vincent Diepeveen wrote: > >>On September 15, 2001 at 11:14:36, Sune Fischer wrote: > >>> bb ^= mask[to_square]; // remove the bit >>> >>> movelist[++counter].from=from_square; >>> movelist[counter].to=to_square; >>> movelist[counter].piece=QUEEN; >>> movelist[counter].capturedpiece=enemy.piece[board.id[to_square]]; >> >>this looks ugly. Using a pointer here would be way faster. > >Not necessarily. If the "counter" variable is enregistered by the compiler, you >end up with about the same thing as if you used a pointer, but it also depends >upon how large the elements of "movelist" are. If compilers optimized very well, then our problems would be solved Bruce, we could go write our programs in JAVA or C++ and let the compiler handle the problems of not allocating and removing objects. Also we would be able to use old Qbasic code in a very efficient way then. That's not what happens however. Usual it's smart to NOT trust the compiler. When patterns get complex then i saw that visual c++ makes huge optimization errors. Like if i check for 2 non-array/pointer entities for being zero: if( a & b ) then do this and that; to produce some crap assembly: CMP EAX,0 JNZ LOOP CMP EDX,0 JNZ LOOP1 Now already people will complain: "you don't need special CMP for 2 different statements". Well they're right. In fact you don't need 2 compares even. All you need is something primitive like: ADD EAX,EDX CMP EAX,0 JNZ LOOP1 However i would need to learn assembly for this or i must rewrite my C code. The compiler isn't smart Bruce. The compiler is very stupid when talking about source connections. So i have to write: if( a+b ) then do this and that; >Using pointers will usually help the compiler out, because it can just indirect >through a value, rather than having to deal with scaling the value and adding it >to a constant. But in some circumstances, scaling it and adding it to a >constant is free. In general the above construction makes no sense. Optimizing it with a pointer is always safer! >bruce
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.