Changeset 1763


Ignore:
Timestamp:
Dec 10, 2011, 7:26:59 PM (8 years ago)
Author:
ksherdy
Message:

Added allocation size in/out parameter to the allocation methods.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/allocator.hpp

    r1758 r1763  
    1818class pool_allocator {
    1919public:
    20         void * allocate ();
    21         void * allocate_aligned ();
     20        void * allocate (uint64_t n, uint64_t & alloc_segment_size);
     21        void * allocate_aligned (uint64_t n, uint64_t & alloc_segment_size);
    2222        void destroy ();
    2323protected:
     
    4848        ~fast_pool_allocator() {}
    4949
    50         void * allocate(uint64_t n) {
    51 
     50        void * allocate(uint64_t n, uint64_t & alloc_segment_size) {
    5251                if(n > available) {
     52                                        cout << "Add Segment" << endl;
    5353                        segment_size = next_segment_size(n);
    5454
     
    7070                        tail->next = next;
    7171                        tail = next;
    72                         next = NULL;
    7372                }
    7473
     
    7675                uint64_t address = reinterpret_cast<uint64_t>(&(tail->segment[i]));
    7776
     77                alloc_segment_size = available;
     78                available -= n;
     79
    7880                return (void *) (address);
    7981        }
    8082
    81         void * allocate_aligned(uint64_t n) {
     83        void * allocate_aligned(uint64_t n, uint64_t & alloc_segment_size) {
    8284                uint64_t n_padded = (n+ALIGNMENT-1);
    8385
    8486                if(n_padded > available) {
     87
    8588                        segment_size = next_segment_size(n_padded);
    8689
     
    102105                        tail->next = next;
    103106                        tail = next;
    104                         next = NULL;
    105107                }
    106108
     
    108110                uint64_t address = reinterpret_cast<uint64_t>(&(tail->segment[i]));
    109111                uint64_t padding = ((address % ALIGNMENT) == 0) ? 0 :  ALIGNMENT - (address % ALIGNMENT);
     112
     113                alloc_segment_size = available;
    110114                available -= (padding + n);
    111115
     
    124128                        crt = next;
    125129                        next = NULL;
     130                        cout << "Del Segment" << endl;
    126131                }
    127132        }
    128133
     134        uint64_t get_alloc_size() const { return alloc_size; }
     135
    129136private:
     137        uint64_t alloc_size;
     138
    130139        const uint8_t ALIGNMENT;
    131140        const uint8_t EXPANSION_FACTOR;
Note: See TracChangeset for help on using the changeset viewer.