Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重载运算符new而不使用关键字new和malloc? 我试图更好地理解C++中的内存分配。关于WEBs有很多概念和理论,但是我找不到C++全局运算符新的真正的源代码。 我理解只需重载运算符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); } void*运算符新建(大小){ void*allocated=malloc(size);//分配必要的空间; 分配的回报; } void操作符删除(void*ptr){ SA*p=静态铸件(ptr); 免费返回(p); }_C++_Memory Management_Operator Keyword_Dynamic Memory Allocation - Fatal编程技术网

重载运算符new而不使用关键字new和malloc? 我试图更好地理解C++中的内存分配。关于WEBs有很多概念和理论,但是我找不到C++全局运算符新的真正的源代码。 我理解只需重载运算符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); } void*运算符新建(大小){ void*allocated=malloc(size);//分配必要的空间; 分配的回报; } void操作符删除(void*ptr){ SA*p=静态铸件(ptr); 免费返回(p); }

重载运算符new而不使用关键字new和malloc? 我试图更好地理解C++中的内存分配。关于WEBs有很多概念和理论,但是我找不到C++全局运算符新的真正的源代码。 我理解只需重载运算符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); } void*运算符新建(大小){ void*allocated=malloc(size);//分配必要的空间; 分配的回报; } void操作符删除(void*ptr){ SA*p=静态铸件(ptr); 免费返回(p); },c++,memory-management,operator-keyword,dynamic-memory-allocation,C++,Memory Management,Operator Keyword,Dynamic Memory Allocation,但是当我看到一些代码重载操作符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 */ t

但是当我看到一些代码重载操作符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); 
}
#包括
结构头{
长度长;
结构头*下一步;
) ;
静态头池={0,0};
静态磁头*h=(磁头*)堆_基址;
/*快速哑第一拟合分配器*/
typedef char*char\u p;
//下一行取决于机器和编译器:
const long WRDSIZE=sizeof(void*);
void*运算符新(大小为字节)
{
/*首先,查看免费列表*/
if(pool.next){
总目*prev&pool;
对于(Head*cur=&pool;cur;cur=cur->next){
如果(当前->长度>=N字节){
上一步->下一步-当前->下一步;
返回(无效*)(字符p(cur)+sizeof(Head));
}else-prev=cur;
}
}
/*空闲列表中无任何内容,从堆中获取新块*/
h=(Head*)((int)((Char_p(h)+WRDSIZE-1))WRDSIZE)*WRDSIZE);
h->next=0;
h->长度=N字节;
h=字符p(h)+n字节+大小f(头);
返回(void*)(字符p(h)-n字节);
}

没有调用一个新的或malloc。这如何分配内存???

源代码将调用其他库或非常复杂。这不太可能对您有所帮助。它很可能是
malloc
。如何实现这一点是任何编译器的选择。不会有任何常见的源代码。因此,是否有可能重载ope在不使用关键字new或malloc的情况下执行新操作?如果您希望执行的操作是替换全局运算符
new
delete
,请参阅