我正在尝试创建基本的内存系统,我看到它的工作原理。我正在进行压力测试并寻找与malloc的比率,我的问题是在调试模式下我的比例是12-13但是在发布模式下它下降到5.8 -6我不明白是什么原因。我知道在发布模式下不是initilazion变量消耗时间但我认为我初始化我的所有变量。我的警告lvl是4.İf我的代码很慢如何在调试模式下运行速度比发布哪个应该更快?我的代码中可能存在一些错误,但我不确定它是什么。
发布中的 比率:
Mem Lib:压力测试:3471.899902 ms
自定义记忆:压力测试:592.518250 ms
快一倍:5.859566
调试中的 比率
Mem Lib:压力测试:5603.395996 ms
自定义记忆:压力测试:436.663391 ms
快一点:12.832301
正如您所看到的,我的自定义内存时间增加了(超过了调试模式)在调试中它花了 436 秒,但在Release中 592 这是我的问题。 我正在使用Visual Studio 12
这是我的免费代码:
memVoid memSystem::Free( memVoid * const p ){
usedHdr * pUsed= (usedHdr *)p;
pUsed--;
heapHdr *pHeap = this->getHeap();
//Delete Used
if(pHeap->usedHead->usedNext!=0)
{
if(pUsed->usedPrev==0)
{
pHeap->usedHead= pUsed->usedNext;
pHeap->usedHead->usedPrev=0;
}
else if(pUsed->usedNext==0)
{
pUsed->usedPrev->usedNext=0;
}
else{
pUsed->usedNext->usedPrev=pUsed->usedPrev;
pUsed->usedPrev->usedNext=pUsed->usedNext;}
}
else
pHeap->usedHead=0;
freeHdr *pFree= (freeHdr*) pUsed;
memStats *pStats =&pHeap->stats;
///p free
pFree->blockSize = pUsed->blockSize;
pFree->freeNext=0;
pFree->freePrev=0;
pFree->blockType=FREE_TYPE;
pFree->pad0=0;
pFree->pad1=0;
pFree->pad2=0;
pStats->currUsedMem-=pFree->blockSize;
///Insert Free to list as Sorted
InsertSorted(pFree);
pStats->currNumFreeBlocks++;
pStats->currFreeMem+=pFree->blockSize;
//////This for collapsing(union) two freen eighbors
///Look for up
freeHdr* pFreelist=pFree->freePrev;
if(pFreelist!=0)
{
memU32 i= memU32(pFreelist)+pFreelist->blockSize+sizeof(freeHdr);
if(i==(memU32)pFree)
{
pFreelist->freeNext=pFree->freeNext;
if(pFree->freeNext!=0)
pFree->freeNext->freePrev=pFreelist;
pFreelist->blockSize+=pFree->blockSize+sizeof(freeHdr);
pStats->currNumFreeBlocks--;
pStats->currFreeMem+=sizeof(freeHdr);
pFree=pFreelist;
}
}
///Look For Down
pFreelist=pFree->freeNext;
if(pFreelist!=0)
{
memU32 i= memU32(pFree)+pFree->blockSize+sizeof(freeHdr);
if(i==(memU32)pFreelist)
{
pFree->freeNext=pFreelist->freeNext;
if(pFreelist->freeNext!=0)
pFreelist->freeNext->freePrev=pFree;
else
pFree->freeNext=0;
pFree->blockSize+=pFreelist->blockSize+sizeof(freeHdr);
pStats->currNumFreeBlocks--;
pStats->currFreeMem+=sizeof(freeHdr);
}
}pStats->currNumUsedBlocks--;}