哪些编程错误使Debug比发布运行得更快?(调试如何比发布运行得更快?)

时间:2014-10-17 09:03:37

标签: c++ performance debugging visual-studio-debugging

我正在尝试创建基本的内存系统,我看到它的工作原理。我正在进行压力测试并寻找与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--;}

0 个答案:

没有答案