|
Its not Laser C, it is the malloc() in the Atari OS. It
allocates an extra 64 bytes (if memory serves).
TOS V1.4, if it ever gets released, will have a work around for
this according the the folks at Atari, however malloc() will
function exactly the same, according to the last public decision
posted on the usenet.
Bob
|
| I don't use Laser C so I can't answer your question specificly,
but...
You may want to try one of the PD malloc() routines that are around
I've put the malloc() (and associated routines) from Mark Johnsons
public domain C compiler (V2.0) in:
LEDDEV::DISK$USER9:[WALLACE.PUBLIC.ST]MALLOC.C
This file includes malloc(), realloc(), calloc() and free(). It
gets around the TOS Malloc() bug that I've heard about by calling
Malloc() infrequently (which is possible since it asks for large
chunks and manages the memory itself).
The code looks like it should work with any C compiler (it doesn't
use int's only long's and shorts' etc..). The one line you may have
to change and/or modify is the trap(1,...) call thats used to access
TOS's Malloc(). Mark Williams C I think has bios() calls as apposed
to trap() calls and also defines Malloc() for you, I don't know
how Laser C (or others) provide this interface but it should be
an easy change.
NOTE that Malloc() and malloc() are not the same! Malloc() is the
TOS (or rom) memory allocator and malloc() is memory allocator library
routine provided by your C compiler. It is possible that Laser C
just defines malloc() to be equivelent to Malloc() and therefore
is susceptable to Malloc()'s inherent bugs.
Ray
|