View | Details | Raw Unified
Collapse All | Expand All

(-) muse-0.6.2/memory.cpp (-1 / +1 lines)
 Lines 45-51    Link Here 
void Pool::grow(int idx)
void Pool::grow(int idx)
      {
      {
      int esize = (idx+1) * sizeof(int);
      int esize = (idx+1) * sizeof(void*); //just guessing here
      Chunk* n    = new Chunk;
      Chunk* n    = new Chunk;
      n->next     = chunks[idx];
      n->next     = chunks[idx];
(-) muse-0.6.2/memory.h (-8 / +8 lines)
 Lines 24-34    Link Here 
            Verweis* next;
            Verweis* next;
            };
            };
      struct Chunk {
      struct Chunk {
            enum { size = 4 * 1024 };
            enum { size = sizeof(void*) * 1024 };
            Chunk* next;
            Chunk* next;
            char mem[size];
            char mem[size];
            };
            };
      enum { dimension = 8 };
      enum { dimension = 4*sizeof(void*) }; //maybe 2*sizeof(void*) was meant .. nobody knows
      Chunk* chunks[dimension];
      Chunk* chunks[dimension];
      Verweis* head[dimension];
      Verweis* head[dimension];
      Pool(Pool&);
      Pool(Pool&);
 Lines 48-57    Link Here 
inline void* Pool::alloc(size_t n)
inline void* Pool::alloc(size_t n)
      {
      {
      int idx = ((n + sizeof(int) - 1) / sizeof(int)) - 1;
      int idx = ((n + sizeof(void*) - 1) / sizeof(void*)) - 1; // what does that formular mean?
      if (idx >= dimension) {
      if (idx >= dimension) {
            printf("panic: alloc %lu\n", n);
		  printf("Using std-allocator %lu characters requested",n);
            exit(-1);
		  return ::operator new(n);
            }
            }
      if (head[idx] == 0)
      if (head[idx] == 0)
            grow(idx);
            grow(idx);
 Lines 66-75    Link Here 
inline void Pool::free(void* b, size_t n)
inline void Pool::free(void* b, size_t n)
      {
      {
      int idx = ((n + sizeof(int) - 1) / sizeof(int)) - 1;
      int idx = ((n + sizeof(void*) - 1) / sizeof(void*)) - 1;
      if (idx >= dimension) {
      if (idx >= dimension) {
            printf("panic: alloc %lu\n", n);
		  printf("Using std-deallocator %lu characters to be freed",n);
            exit(-1);
		  return ::operator delete(b);
            }
            }
      Verweis* p = static_cast<Verweis*>(b);
      Verweis* p = static_cast<Verweis*>(b);
      p->next = head[idx];
      p->next = head[idx];