Author: Robert Hyatt
Date: 21:16:38 01/25/98
Go up one level in this thread
On January 25, 1998 at 22:49:01, James Long wrote: >On January 25, 1998 at 20:00:34, Bruce Moreland wrote: > >> >>On January 25, 1998 at 17:55:45, James Long wrote: >> >>>A couple months ago I decided to completely rewrite >>>my chess program "Tristram." One of the things I'm >>>doing is moving from C to C++. >>> >>>Now I'm ready to write some move generation routines. >>>In previous versions of Tristram, I declared a >>>global array CHESS_MOVE moves[MAXPLY][MAXPLY]. >>> >>>This time I'm thinking about using a doubly linked >>>list, or even an array of singly linked list >>>MoveList moves[MAXPLY]. >> >>What is the point of this data structure? I don't know why you'd need a >>memory allocator at all. > >The point? An array of movelist. It contains a list of >moves at each ply. The size of each list varies, which >is why I would need a memory allocator. > simple declare a global array : int movelist[5000]; and another int *last[128]; last[ply] points to the last move generated for the current ply+1, which means that at ply+1, you start at last[ply-1] and generate all you want, incrementing last[ply] as you do. no dynamic allocation. No sloppy addressing. > > >>>This means that every time I wanted to add a move to >>>one of the list, I'd have to call the "new" routine >>>to allocate the memory. >>> >>>Before I get into it, has anybody tried this before >>>and found it too expensive? >> >>Assuming you do need one: >> >>The "new" that comes with any compiler has got to be a general-purpose >>routine that can handle elements of any size, allocated in any order, >>and freed in any order. >> >>If you cut corners on this, it makes sense that you can do better. You >>can make a mark and release heap, if you can guarantee that you will >>always free elements in exactly the reverse order than you allocated >>them, for instance. >> > >Another poster replied that it was too slow. I suspected it might, >so I asked before I expended the energy. > >So I guess it's best to allocate more memory than required >from the start, similiar to dimensioning a move array >with 100xMAXPLY elements. not big enough. you can generate more than 200 moves in some positions. So it's easier to use an array of moves and a pointer for each ply point to the end of that ply's list... > >-- >James
This page took 0 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.