operator new使用

     operator new有时候会用到,以下是常用的方式:

第一种方式:

class MemBlock1
{
public:
MemBlock1(int len)
{
nLen = len;
pData = (char*)malloc(len);
   memset(pData,0,nLen);
printf("constructor\n");
}
~MemBlock1()
{
free(pData);
printf("destructor\n");
}

void* operator new(size_t size)
{
mem = new char[size];
void* addr = (void*)mem;
printf("new %0x \n",addr);
return addr;


}
void assignval(char* pdata,int len)
{
if(len > nLen)
return;
strncpy(pData,pdata,len);
pData[len-1] = '\0';
}


void operator delete(void* p,size_t size)
{
char* pd = (char*)p;
printf("delete %d,%0x\n",(int)size,pd);
delete[] mem;
}

void Show()
{
printf(pData);
printf("\n");

}
public:
static char* mem;
char*           pData;
int                nLen;


};
char* MemBlock1::mem = NULL;

第二种方式:

class MemBlock2
{
public:
unsigned int nSize;
char         aData[1];


void* operator new(size_t,unsigned int _nSize)
{
return ::operator new(sizeof(MemBlock2)+_nSize);
}


void operator delete(void* p,size_t)
{
::operator delete(p);
}


MemBlock2(unsigned int _nSize):nSize(_nSize)
{
char* pData = aData;
*reinterpret_cast<unsigned short*>(pData) = (unsigned short)1;


}


};

使用方式:

int len = 1024*1024;

MemBlock1* pMB = new MemBlock1(len);//MemBlock2* pMB = new(len) MemBlock2(len);
FILE *fr ;
fr = fopen("1.txt","r");
fread(pMB->pData,1,len,fr);
pMB->pData[len-1]='\0';
fclose(fr);
delete pMB;

参考:

C++应用程序性能优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值