我试图更好地理解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。怎么能分配内存??