19,468
社区成员
发帖
与我相关
我的任务
分享
DWORD_PTR dwSize = (512 << 10) << 10;
DWORD_PTR dwXor = 0x1248F842;
if (sizeof(dwXor) == 8)
dwXor = 0x1248F8421248F842;
BYTE *pTestData = new BYTE[dwSize];
DWORD dwXorTimer = GetTickCount();
for (DWORD_PTR i = 0; i < dwSize / sizeof(DWORD_PTR); i++)
*((DWORD_PTR *)pTestData + i) ^= dwXor;
TRACE1("Timer: %d\n", GetTickCount() - dwXorTimer);
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR
#include <Windows.h>
#pragma comment(lib, "kernel32.lib")
void main()
{
DWORD_PTR dwIndex;
DWORD_PTR dwSize;
DWORD_PTR dwXor;
DWORD dwTimer;
BYTE *pTestData;
TCHAR szOutput[32];
dwSize = (512 << 10) << 10;
dwXor = 0x1248F842;
if (sizeof(dwXor) == 8)
dwXor = (DWORD_PTR)0x1248F8421248F842;
pTestData = (BYTE *)LocalAlloc(LMEM_ZEROINIT, dwSize);
dwTimer = GetTickCount();
for (dwIndex = 0; dwIndex < dwSize / sizeof(DWORD_PTR); dwIndex++)
*((DWORD_PTR *)pTestData + dwIndex) ^= dwXor;
dwTimer = GetTickCount() - dwTimer;
LocalFree(pTestData);
wsprintf(szOutput, TEXT("Timer: %d"), dwTimer);
MessageBox(NULL, szOutput, TEXT("test"), MB_ICONINFORMATION);
}
刚刚在 vs2010 下编写重新编写的代码,纯c编译
32位和64位结果可以说是一样,上下浮动10毫秒
奇怪了....................