#include#include <Windows.h> #include <atlbase.h> #include <Tlhelp32.h> #include <time.h> //……….. int WINAPI findString(int lpmem,int memsize,int lpString,int StringSize,int AddrList)//; // { int nRet=-1; asm { pushad; mov edx,lpmem; add edx,memsize; sub edx,StringSize; mov edi,lpmem; mov esi,lpString; mov eax,[esi]; mov ecx,[esi+4]; mov ebx,AddrList; LableBegin: cmp eax,[edi]; jnz LableNext; cmp ecx,[edi+4]; jnz LableNext; mov ecx,StringSize; push edi; repz cmpsb; pop edi; mov esi,lpString; mov ecx,[esi+4]; jnz LableNext; LableSave: mov ebx,edi; add ebx,4; LableNext: inc edi; cmp edi,edx; jnz LableBegin; LableRet: mov nRet,ebx; popad; } return nRet; } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int SearchByteShuZu(byte bForSearch,int ifLen, byte bWaitSearch, int iwLen,int iFirstSearchPos) {//int SearchByteShuZu(byte bForSearch,int ifLen, byte bWaitSearch, int iwLen,int iFirstSearchPos);//寻找字节集数组(待寻找的,待寻找的最大长度,要寻找的,要寻找的长度,起始寻找位置) 返回-1 为未找到 位置从0开始 int iCurrentPos=0;//待搜索位置 if (iFirstSearchPos>ifLen)//超过待搜索的长度 { return -1; } if (iwLen>ifLen)//要搜索的长度比 待搜索的长度大 返回 { return -1; } if (iwLen==0||ifLen==0) { return -1;//0 返回 } // bForSearch+=iFirstSearchPos;//设置起始搜索位置 iCurrentPos+=iFirstSearchPos;//设置起始搜索位置 bForSearch+=iCurrentPos;//设置指针 对应 while(1) { while(bForSearch!=bWaitSearch)//找到第一个相同的 { iCurrentPos+=1;//当前搜索位置前进1 bForSearch+=1;//当前指针前进1 if (iCurrentPos>ifLen) //长度超过待搜索的整体长度返回 { return -1; } } for (int i=0;i<iwLen;++i)//开始对比 { if ((bForSearch+i)!=(bWaitSearch+i)) { iCurrentPos+=1;//当前搜索位置前进1 bForSearch+=1;//当前指针前进1 //设置下指针前进1 break;//找到一个不同的 跳出 } if (i+1==iwLen) { return iCurrentPos;//找到列 } } } } int64 FileTimeToQuadWord(PFILETIME pft) { return Int64ShllMod32(pft->dwHighDateTime,32)|pft->dwLowDateTime; } int64 GetThreadRunTime() //取线程当前占用cpu时间 单位:100ns(纳秒) { FILETIME ftKernelTime,ftUserTime,ftDummy; GetThreadTimes(GetCurrentThread(),&ftDummy,&ftDummy,&ftKernelTime,&ftUserTime); return FileTimeToQuadWord(&ftKernelTime)+FileTimeToQuadWord(&ftUserTime); } char szFind[0x20000000]; int main() { LPSTR szsea=”45644564”; int64 qwStartTime=0,qwTime=0; qwStartTime=GetThreadRunTime();//setvalue srand(time(NULL)); for (int i=0;i<sizeof(szFind)/sizeof(DWORD);i++) { ((DWORD)szFind)[i]=rand(); } qwTime=GetThreadRunTime()-qwStartTime; printf(“/r/nSetValue:%I64d100ns %dms/r/n”,qwTime,qwTime/1000/10); qwStartTime=GetThreadRunTime(); findString((int)szFind,sizeof(szFind),(int)szsea,8,0); qwTime=GetThreadRunTime()-qwStartTime; printf(“/r/nfindString:%I64d100ns %dms/r/n”,qwTime,qwTime/1000/10); qwStartTime=GetThreadRunTime(); SearchByteShuZu((byte)szFind,sizeof(szFind),(byte)szsea,8,0); qwTime=GetThreadRunTime()-qwStartTime; printf(“/r/nSearchByteShuZu:%I64d100ns %dms/r/n”,qwTime,qwTime/1000/10); return 0; }

GetThreadTimes 获取的时间只是cpu执行时间 不包含睡眠时间及等待事件的时间

效率对比用

int memfind(const char mem, const char str, int sizem, int sizes) { int da,i,j; if (sizes == 0) da = strlen(str); else da = sizes; for (i = 0; i < sizem; i++) { for (j = 0; j < da; j ++) if (mem[i+j] != str[j]) break; if (j == da) return i; } return -1; }

感谢您的阅读,本文由 smallwhite's Blog 版权所有。如若转载,请注明出处:smallwhite's Blog(https://smallwhite.ml/pub/uncategorized/jing-que-ji-suan-dai-ma-duan-zhi-xing-shi-jian.html
剽窃vs2010 mfc 工程 让程序自动嵌入xp界面风格 系统风格
进程线程伪句柄转为真实句柄