c++中的placement new是::operator new的重载版本,用于在已经分配好的内存上创建对象。这样就可以在用户空间对内存进行操作,减少了对象生成的成本,控制对象的地址从而减少内存碎片,对象池估计也是这么搞的吧。
class A{ public: A(){ cout<<"A"<<endl; } ~A(){ cout<<"~A"<<endl; } }; int main() { void* t=malloc(sizeof(char)*100); A* a=new (t)A(); delete a; }
函数原型:void *operator new( size_t, void *p ) throw() { return p; }
上面调用后为: oerator new(sizeof(A),a)。
最近看netty的源码,buffer竟然使用jemalloc的东西,看来要花点时间把这块给啃下来