cartesianheap.h
来自「hoard内存管理器」· C头文件 代码 · 共 60 行
H
60 行
#ifndef _CARTESIANHEAP_H_#define _CARTESIANHEAP_H_//#include "heaplayers.h"//#include "treap.h"// NB: All objects are rounded up to at least the size of a treap node// (around 24 bytes on a 32-bit architecture).template <class SuperHeap>class CartesianHeap : public SuperHeap { // Provide a freelist wrapper for treap nodes. class MyTreap : public Treap<size_t, void *> { public: // class Node : public PerClassHeap<Treap<size_t, void *>::Node, FreelistHeap<SuperHeap> > {}; };public: ~CartesianHeap (void) { // FIX ME // free everything from the treap. } void * malloc (size_t sz) { // Round sz up. sz = (sz < sizeof(MyTreap::Node)) ? sizeof(MyTreap::Node) : sz; MyTreap::Node * n = (MyTreap::Node *) treap.lookupGreater (sz); if (n != NULL) { assert (n->getValue() == (void *) n); void * ptr = n->getValue(); treap.remove (n); // delete n; // onto a freelist return ptr; } else { return SuperHeap::malloc (sz); } } void free (void * ptr) { // MyTreap::Node * n = new MyTreap::Node; // from a freelist // cout << "n = " << (void *) n << endl; MyTreap::Node * n = (MyTreap::Node *) ptr; treap.insert (n, getSize(ptr), ptr, (unsigned int) ptr); } // Removes a pointer from the treap. void remove (void * ptr) { treap.remove ((MyTreap::Node *) ptr); } private: MyTreap treap;};#endif // _CARTESIANHEAP_H_
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?