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 4 of 5)

December, 2005: Policy-Based Memory Allocation

Listing 3

template <class Super, size_t S1, size_t S2>
struct FLHeap {
  ~FLHeap() {
    while (myFreeList) {
      freeObject* next = myFreeList->next;
      Super::free(myFreeList);
      myFreeList = next;
    }
  }
  void * malloc(const size_t s) {
    if (s < S1 || s > S2)) {
      return Super::malloc(s);
    }
    if (!myFreeList) {
      return Super::malloc(S2);
    }
    void * ptr = myFreeList;
    myFreeList = myFreeList->next;
    return ptr;
  }
  void free(void * p) {
    const size_t s = getSize(p);
    if (s < S1 || s > S2) {
      return Super::free(p);
    }
    freeObject p =
      reinterpret_cast<freeObject *>(ptr);
    p->next = myFreeList;
    myFreeList = p;
  }
private:
  /// The linked list pointer we embed in the freed objects.
  class freeObject {
  public:
    freeObject * next;
  };
  /// The head of the linked list of freed objects.
  freeObject * myFreeList;
};

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



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK