Message-ID: <3418F8AA.4101@bo.dada.it> Date: Fri, 12 Sep 1997 10:09:14 +0200 From: Diego Zuccato Organization: CyberSpace Software Labs BBS MIME-Version: 1.0 To: DJ Delorie CC: djgpp-workers AT delorie DOT com Subject: Re: fread slowstart References: <199709120122 DOT VAA02054 AT delorie DOT com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Precedence: bulk DJ Delorie wrote: > There is no need to save it. Whenever a program is started, the > parent's TB has nothing but the child's argv and env in it, and the > parent never uses them after the child returns. Well, then why should be more than one tb be needed ? > That's why I'm thinking of letting crt0.c do the work, instead of > stub.asm. crt0 would have to detect *if* a previous TB is large > enough, shrink its own down to save space, and reconfigure itself to > use the detected TB. Hm. Why shrink it ? Let it be constant and avoid memory fragmentation. If A calls B with a tb of 32K, B thinks 2K is enough and shrinks it. Then allocates some DOS memory for its use. If B have to call C with a really long command line (eg 20K), then it should allocate 20 more Kbytes, prepare new tb, free old tb and then call C. Seems quite slow and, if repeated, a lot of DOS memory is wasted in small chunks :-( If the tb size isn't altered, it could lead to a constant 64K of DOS memory used. In the example, we would never get fragmentation. Just a bit of 'slack' space. > If no TB is detected, it expands its own and stores the pointer > somewhere in DOS memory. Uhm... Couldn't it be possible to use some 'marker' to identify the tb ? So it's not needed to store a pointer anywhere. Just search thru allocated memory blocks one that starts with the given string. It's nearly impossible that two memory blocks with a certain size start with the same string. And to avoid that 'nearly', it could be added a 'offset' byte (eg. 1 to 3) that tells where does the actual ID string start...