FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
C++
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
December 01, 2005

Policy-Based Memory Allocation

(Page 3 of 5)

December, 2005: Policy-Based Memory Allocation

Listing 2

template <class Super>
struct UseSizeHeap : public Super {
  static size_t getSize(const void * ptr) {
    return ((freeObject *) ptr - 1)->sz;
  }
protected:
  union freeObject {
    size_t sz;
    double _dummy; // for alignment.
  };
};

template <class SuperHeap>
class SizeHeap
    : public UseSizeHeap<SuperHeap> {
  typedef typename
    UseSizeHeap<SuperHeap>::freeObject
      freeObject;
public:
  void * malloc(const size_t sz) {
    // Add room for a size field.
    freeObject * ptr = (freeObject *)
      SuperHeap::malloc(sz +
        sizeof(freeObject));
    // Store the requested size.
    ptr->sz = sz;
    return (void *) (ptr + 1);
  }
  void free(void * ptr) {
    SuperHeap::free((freeObject *)ptr - 1);
  }
};

Previous Page | 1 | 2 | 3 | 4 | 5 Next Page
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK