home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / x / xibm.zip / common / ibmMalloc.h < prev    next >
C/C++ Source or Header  |  1991-09-20  |  3KB  |  111 lines

  1. /*
  2.  * $Id: ibmMalloc.h,v 1.1 1991/09/20 18:24:03 mtranle Exp $
  3.  *
  4.  * Copyright IBM Corporation 1987,1988,1989
  5.  *
  6.  * All Rights Reserved
  7.  *
  8.  * Permission to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted,
  10.  * provided that the above copyright notice appear in all copies and that 
  11.  * both that copyright notice and this permission notice appear in
  12.  * supporting documentation, and that the name of IBM not be
  13.  * used in advertising or publicity pertaining to distribution of the
  14.  * software without specific, written prior permission.
  15.  *
  16.  * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  17.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  18.  * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  19.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  20.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  21.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  22.  * SOFTWARE.
  23.  *
  24. */
  25. /*
  26.     malloc.h - definitions for memory allocation
  27.  
  28.     author: WJHansen, CMU/ITC
  29.     (c) Copyright IBM Corporation, 1986
  30. */
  31.  
  32. /*
  33.  *    a different implementation may need to redefine
  34.  *    INT WORD BLOCK ACTIVE PREACTIVE
  35.  *    where INT is integer type to which a pointer can be cast
  36.  *    and INT is the number of bytes given by WORD
  37.  *    WORD needs to be at least 4 so there are two zero bits
  38.  *    at the bottom of a Size field
  39.  */
  40.  
  41. #define INT int
  42. #define WORD 4
  43. #define EPSILON  (sizeof(struct freehdr)+sizeof(struct freetrlr))
  44. #define SEGGRAIN 4096 /* granularity for sbrk requests (in bytes) */
  45. #define ACTIVE    0x1
  46. #define PREACTIVE 0x2
  47. #define testbit(p, b) ((p)&(b))
  48. #define setbits(p, b) ((p)|(b))
  49. #define clearbits(p) ((p)&(~ACTIVE)&(~PREACTIVE))
  50. #define clearbit(p, b) ((p)&~(b))
  51. #define NEXTBLOCK(p) ((struct freehdr *)((char *)p+clearbits(p->Size)))
  52. #define PREVFRONT(p) (((struct freetrlr *)(p)-(sizeof (struct freetrlr)/WORD))->Front)
  53.  
  54. #define RETADDROFF (6)
  55.  
  56. #ifndef IDENTIFY
  57.  
  58. struct hdr { int Size };
  59. struct freehdr {
  60.     int Size;
  61.     struct freehdr *Next, *Prev;
  62. };
  63. struct freetrlr { struct freehdr *Front };
  64. struct segtrlr {
  65.     int Size;
  66.     struct freehdr *Next, *Prev;
  67.     struct freehdr *Front;
  68. };
  69.  
  70. #else
  71.  
  72. /* two additional words on every free block identify the caller that created the block
  73.    and it sequence number among all block creations */
  74. struct hdr { 
  75.     char *caller;
  76.     int seqno;
  77.     int Size;
  78. };
  79. struct freehdr {
  80.     char *caller;
  81.     int seqno;
  82.     int Size;
  83.     struct freehdr *Next, *Prev;
  84. };
  85. struct freetrlr { struct freehdr *Front; };
  86. struct segtrlr {
  87.     char *caller;
  88.     int seqno;
  89.     int Size;
  90.     struct freehdr *Next, *Prev;
  91.     struct freehdr *Front;
  92. };
  93.  
  94. #endif
  95.  
  96. struct arenastate {
  97.     struct freehdr *arenastart;
  98.     struct freehdr *arenaend;
  99.     struct freehdr *allocp;    /*free list ptr*/
  100.     struct hdr *PendingFree;
  101.     int SeqNo;
  102.     char arenahasbeenreset;
  103.     char InProgress;
  104.     char RecurringM0;
  105.     
  106. };
  107.  
  108. struct arenastate *GetMallocArena();
  109. char *malloc(), *realloc();
  110.  
  111.