home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 6 / Sonderheft_6-96.iso / pd / libraries / wbstart / src / memory.c < prev    next >
C/C++ Source or Header  |  1996-11-03  |  2KB  |  91 lines

  1. /*
  2.  * memory.c  V2.2
  3.  *
  4.  * WBStart memory pool functions
  5.  *
  6.  * (c) 1991-1996 Stefan Becker
  7.  */
  8.  
  9. #include "wbstart.h"
  10.  
  11. /* Local data structures */
  12. struct Memory {
  13.  ULONG m_Size;
  14.  /* Real memory block follows after this */
  15. };
  16.  
  17. /* Local data */
  18. static void *MemoryPool;
  19.  
  20. /* Initialize memory */
  21. BOOL InitMemory(void)
  22. {
  23.  return((MemoryPool = CreatePool(MEMF_PUBLIC, 4096, 4096)) != NULL);
  24. }
  25.  
  26. /* Delete memory */
  27. void DeleteMemory(void)
  28. {
  29.  DeletePool(MemoryPool);
  30. }
  31.  
  32. #ifdef DEBUG
  33. /* Debugging versions of memory functions. These work with Mungwall */
  34.  
  35. /* Allocate one memory block from pool */
  36. void *AllocateMemory(ULONG size)
  37. {
  38.  struct Memory *m;
  39.  
  40.  /* Add size for our data structure */
  41.  size += sizeof(struct Memory);
  42.  
  43.  /* Allocate memory, save size and move pointer to real mem. block */
  44.  if (m = AllocMem(size, MEMF_PUBLIC)) (m++)->m_Size = size;
  45.  
  46.  kprintf("Allocated memory %08lx (%ld)\n", m, size - sizeof(struct Memory));
  47.  
  48.  /* Return pointer to memory block */
  49.  return(m);
  50. }
  51.  
  52. /* Free memory block */
  53. void FreeMemory(void *p)
  54. {
  55.  ULONG size = (--((struct Memory *) p))->m_Size;
  56.  
  57.  kprintf("Freeing memory %08lx (%ld)\n", (struct Memory *) p + 1,
  58.                                          size - sizeof(struct Memory));
  59.  
  60.  /* Free memory */
  61.  FreeMem(p, size);
  62. }
  63.  
  64. #else
  65. /* The production code uses memory pools */
  66.  
  67. /* Allocate one memory block from pool */
  68. void *AllocateMemory(ULONG size)
  69. {
  70.  struct Memory *m;
  71.  
  72.  /* Add size for our data structure */
  73.  size += sizeof(struct Memory);
  74.  
  75.  /* Allocate memory from pool, save size and move pointer to real mem. block */
  76.  if (m = AllocPooled(MemoryPool, size)) (m++)->m_Size = size;
  77.  
  78.  /* Return pointer to memory block */
  79.  return(m);
  80. }
  81.  
  82. /* Free memory block */
  83. void FreeMemory(void *p)
  84. {
  85.  ULONG size = (--((struct Memory *) p))->m_Size;
  86.  
  87.  /* Return block to pool */
  88.  FreePooled(MemoryPool, p, size);
  89. }
  90. #endif
  91.