www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/03/19/18:10:02

Message-Id: <m0w7KLY-000S2XC@natacha.inti.edu.ar>
Comments: Authenticated sender is <salvador AT natacha DOT inti DOT edu DOT ar>
From: "Salvador Eduardo Tropea (SET)" <salvador AT natacha DOT inti DOT edu DOT ar>
Organization: INTI
To: djgpp AT delorie DOT com
Date: Wed, 19 Mar 1997 15:34:06 +0000
MIME-Version: 1.0
Subject: An experimental and enhanced malloc.

--Message-Boundary-4697
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

"A.Appleyard" <A DOT APPLEYARD AT fs2 DOT mt DOT umist DOT ac DOT uk> wrote:
>Re my messages about malloc(), here is a version of malloc() free() realloc()
>which I made by altering djgpp\src\libc\ansi\stdlib\malloc.c; I have tested it
>quickly and it seems to work. See the comments `/*******' herinunder.

  I taked a look to your code and to the code in libc, and:

1) Seems to be right.
2) Seems to be better.

  You ask in your code:

> /****** If size>=pagesize, the standard form gets (size/pagesize + 1) */
> /****** pages here. What is the extra unused page for? */

  The extra page is for realloc, see the following lines taked from the
libc version of realloc:

  onb = 1 << (i + 3);
  if (onb < pagesz)
    onb -= sizeof (*op) + RSLOP;
  else
    onb += pagesz - sizeof (*op) - RSLOP;

  So here if size>=pagesize realloc asumes that we have an extra page in
the block. It helps realloc but eats a lot of memory if you are allocating
blocks of size 4K or similar.

  And now another thing, I don't know what a hell the ANSI says but the
realloc implementation isn't very good for my code, here is the relevant
code (I taked it from the A. APPLEYARD code because is much more clear):

if (N+OW<=oldsize)
   if (N+OW>oldsize/2)
      return Old;
free(Old);
if (!(New=malloc(N)))
   return 0;
   
  From my point of view the free must be moved AFTER the call to malloc
because in this way if malloc fails the old block isn't moved to the free
pool of memory.
  We don't gain anything freeing the block first because we checked that
malloc won't reuse this block.

  And finally another one: The algorithm used by malloc is fast but is
easy to get the memory fragmented, for example if we allocate a lot of
blocks of 100Kb and then we free these blocks and we try to allocate one
of 200Kb ... malloc will fail even when all the memory is free just because
the free memory is in the 128Kb bucket and not in the 256Kb one.
  I don't know if that was discused some days ago or was another topic
about malloc but I guess that we need some kind of optimizer to be called
under these situations to reorder the heap and liberate the unused memory
so then morecore can allocate the requested block.
  I attached to this mail a modified version of the A. Appleyard malloc to
reuse buckets when there is no more memory. The code is unoptimized and was
tested only with the file included in the zip.
 I included 2 examples:
1) Just allocates as many 1Mb blocks as posible and then frees all the
blocks, after that just tries to allocate 2 Mb, imposible with the actual
malloc, but this malloc joins 2 1Mb buckets to create one of 2 Mb.
2) The program allocate blocks as large as posible, then liberate the blocks
and finally tries to allocate a block of size = 1/2 of the smaller previously
allocated. This time malloc will split a big bucket into smaller ones.
  Sorry if I'm talking about allready solved things but I discovered this
problem testing my editor and was very annoying see how 24 Mb of memory
wasn't enough to handle a 9 Mb clipboard that grown incrementally.

SET

--------------- 0 --------------------------------
Salvador Eduardo Tropea (SET).
Address: Curapaligue 2124, Caseros, 3 de Febrero
Buenos Aires, (1678), ARGENTINA
TE: +(541) 759 0013
--Message-Boundary-4697
Content-type: text/plain; charset=US-ASCII
Content-description: Information about this message.

This message contains a file prepared for transmission using the
MIME BASE64 transfer encoding scheme. If you are using Pegasus
Mail or another MIME-compliant system, you should be able to extract
it from within your mailer. If you cannot, please ask your system
administrator for help.

   ---- File information -----------
     File:  malloc.zip
     Date:  18 Mar 1997, 20:50
     Size:  3239 bytes.
     Type:  ZIP-archive

--Message-Boundary-4697
Content-type: Application/ZIP; name=malloc.zip
Content-transfer-encoding: BASE64

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

--Message-Boundary-4697--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019