Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!mcsun!tuvie!inst182 From: inst182@tuvie (Inst.f.Techn.Informatik) Newsgroups: comp.lang.c Subject: Re: need better MSC5.1 malloc() UPDATE Message-ID: <1637@tuvie> Date: 6 Jun 90 17:00:43 GMT References: <30353@cup.portal.com> <30489@cup.portal.com> Reply-To: hp@vmars.UUCP Organization: Technical University of Vienna, EDP-Center Lines: 48 cliffhanger@cup.portal.com (Cliff C Heyer) writes: >I would like to replace the MSC malloc() routines >with ones that do defragmentation. This is done >by having malloc() maintain an internal table to >DEREFERENCE POINTERS. eg., when you do a >malloc(), malloc() returns an address that is not >a physical address but the address of a table >entry that contains the physical address. > > ... > >Why do I need this? >I'm using a library (w/o source code) that with >heapwalk shows to have lousy memory management >(it was ported from a "real" OS that takes >care of these things) and after awhile malloc() >returns "Out of memory" when in fact there is >150KB free but broken up into 1KB chunks between >other "in use" data. I don't think such an indirect malloc library would be of much use in your case. If a library routine calls malloc () it expects to get a pointer to the allocated memory block, not a pointer to a pointer to this block. It would happily thrash your table. If you had the source, however you could change all *s to **s, but then you could change the memory management of this library, too. >On DOS, it is the programmer's responsibility to take >care of memory because there is no OS to do it for >you! Windows 3.0 I understand does this. Most "Real OSes" do garbage collection with a MMU (how else could the pointers remain unchanged), which the 8086 just doesn't have. It would be possible in protected mode on 80[234]86 systems, by using a segment per pointer, but switching segments is SLOW (I have been told, I just sold my XT, and bought a 386, and haven't done much experimenting yet). So even on a 80386 UNIX system you wouldn't have any garbage collection, although the unused blocks would probably only accumulate in the swap space, not in main memory. >Cliff | _ | Peter J. Holzer | Think of it | | |_|_) | Technische Universitaet Wien | as evolution | | | | | hp@honey.tuwien.ac.at | in action! | | __/ | ...!uunet!mcsun!tuvie!asupa!honey!hp | Tony Rand |