重载运算符new而不使用key-words new和malloc?

时间:2017-06-26 18:00:49

标签: c++ memory-management operator-keyword dynamic-memory-allocation

我试图更好地理解c ++中的内存分配。关于网络有很多概念和理论,但是我无法找到c ++全局运算符new中的真正源代码。
我理解简单地重载operator new和delete我可以这样做:

void* operator new(size_t size){
        void* allocated = malloc(size); //allocate necessary space;
        return allocated;
}

void operator delete(void* ptr){
        SA<T>* p = static_cast< SA<T>* >(ptr);
        return free(p);
}

但是当我刚看到一些代码重载operator new而不使用new和delete关键字时,我并不知道发生了什么。我读的代码是:

#include <stddef.h>
struct Head { 

long length; 

struct Head *next; 

) ;
static Head pool = { 0, 0 };
static Head *h = (Head *)HEAP_BASE ADDRESS;

/* fast dumb first-fit allocator */
typedef char *Char_p;
// NEXT LINE IS MACHINE AND COMPILER DEPENDENT:
const long WRDSIZE = sizeof (void*) ;

void* operator new(size_t nbytes)
{
    /* First, look in free list */
    if (pool.next){
        Head *prev &pool;
        for (Head *cur = &pool; cur; cur = cur->next) {
            if (cur->length >= nbytes) {
                prev->next - cur->next;
                return (void*) (Char_p(cur) + sizeof(Head));
            }else prev = cur;
        }
     }
/* Nothing on free list, get new block from heap */
    h = (Head*) (((int) ((Char_p(h)+WRDSIZE-1))WRDSIZE)*WRDSIZE);
    h->next = 0;
    h->length = nbytes;
    h = Char_p(h) + nbytes + sizeof(Head);
    return (void*) (Char_p(h) - nbytes); 
}

没有调用new或malloc。怎么能分配内存??

0 个答案:

没有答案