[fpc-devel] ReallocMem with CMem

Daniël Mantione daniel.mantione at freepascal.org
Wed Mar 8 18:31:02 CET 2006



Op Wed, 8 Mar 2006, schreef Micha Nelissen:

> On Wed, 8 Mar 2006 18:10:38 +0100 (CET)
> Daniël Mantione <daniel.mantione at freepascal.org> wrote:
> 
> > 
> > 
> > Op Wed, 8 Mar 2006, schreef Micha Nelissen:
> > 
> > > Shouldn't ReallocMem in CMem zero the newly allocated bytes ?
> > 
> > No, it is the responsibility of the programmer.
> 
> Nope. At least the compiler depends on it being zeroed. The FPC heap
> manager zeroes it, as well.

That is behaviour contrary to the documentation.

Our documentation:

   ReAllocMem resizes the memory pointed to by P so it has size Size. The  
   value of P may change during this operation. The contents of the memory 
   pointed to by P (if any) will be copied to the 
   new location, but may be truncated if the newly
   allocated memory block is smaller in size. If a larger block is 
   allocated, only the used memory is initialized, extra
   memory will not be zeroed out.

   Note that P may be nil, in that case the behaviour of ReAllocMem is 
   equivalent to Getmem.

Delphi documentation:

    The ReallocMem procedure changes the storage size of    
    an existing block of storage.            
    The size may be smaller or bigger.       
    If smaller, then the existing storage is effectively 
    truncated, the remainder being released.             
    If larger, the storage is extended. Or a new block     
    is allocated if necessary. In either case, the         
    It is better to use New for this
    existing storage block data is preserved, and the  
    new part is unitialised.                                   


There is a good reason that the memory should not be initialised; you can 
allocate large amounts of memory in advance. This memory is not actually 
allocated by the OS until you use it. As soon as you initialize the 
memory, it gets allocated immediately.

If the FPC heap manager initialises the memory, that functionality should 
be removed.

Daniël


More information about the fpc-devel mailing list