为什么在64位系统下异或比在32位系统下更慢?

Sandrer 2015-03-01 11:44:10
    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);


上面的代码,在32位下编译运行用时350毫秒
但在64位下居然用了600毫秒

为什么会这样的?64位下每次用8字节异或居然比32位每次4字节更慢的?

如果把 DWORD_PTR 改成 DWORD 然后在64位下编译运行则更慢,这个原因我知道所以不讨论这个
...全文
286 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sandrer 2015-03-02
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
lz的代码好像都是32位吧,64位的应该是long long
DWORD_PTR 在 64 位下会变成 8 字节的
#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
赵4老师 2015-03-02
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
赵4老师 2015-03-02
  • 打赏
  • 举报
回复
楼主生成的是Release版吗?
worldy 2015-03-01
  • 打赏
  • 举报
回复
lz的代码好像都是32位吧,64位的应该是long long
Sandrer 2015-03-01
  • 打赏
  • 举报
回复
#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毫秒 奇怪了....................
Sandrer 2015-03-01
  • 打赏
  • 举报
回复
引用 3 楼 zwfgdlc 的回复:
什么编译器? 我用VC2008SP1试了下,64位要快点.
vs2010旗舰版.........
Sandrer 2015-03-01
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
猜测 可能和数据字节对齐位置有关, 还有可能就是64位访问的时候安全检测项多 还有可能有杀毒软件啥的在监控进程
64位下默认8字节对齐,DWORD_PTR 在32位下是4字节、64位下是8字节,所以应该不是与字节对齐有关 看了下汇编,比32位多了几个指令,寄存器从 e*x 换成了 r*x,其它也没看到有什么 call 什么其它函数啊 刚才在win7 64位的虚拟机里测试了下,就光一个系统其它啥都没有,速度也是差不多啊,所以跟监控也应该无关吧 纠结啊..........难道是cpu的原因?
zwfgdlc 2015-03-01
  • 打赏
  • 举报
回复
什么编译器? 我用VC2008SP1试了下,64位要快点.
zgl7903 2015-03-01
  • 打赏
  • 举报
回复
猜测 可能和数据字节对齐位置有关, 还有可能就是64位访问的时候安全检测项多 还有可能有杀毒软件啥的在监控进程
likfeng 2015-03-01
  • 打赏
  • 举报
回复
看看汇编指令
这是完整版,我打字足足打半天,希望同学快点做好作业吧!—.- 网络安全 第一章作业 1 网络安全有五大要素,分别是保密性,完整性,可用性,可控性,可审查性 2 机密性指确保信息不是暴露给未授权的实体或进程 3主机网络安全技术是一种结合网络特性和操作系统特性的边缘安全技术 4 中国安全评估准则分为自主保护级,系统审计保护级,完全标记保护级,结构化保护级 ,访问验证保护级。 5 TCSEC分为7个等级,它们是D,C1,C2 B1 B2 B3 A1 选择题 1 在短时间内向网络中的某台服务器发送大量无效连接请求,导致合法用户暂时无法访问 服务器的攻击行为是破坏了(C) A机密性 B完整性 C可用性 D可控性 2有意避开系统访问控制机制,对网络设备及资源进行非正常使用属于(B) A破坏数据完整性 B非授权访问 C信息泄漏 D拒绝服务攻击 3主机网络安全系统不能(D) A结合网络访问的网络特性和操作系统性B根据网络访问发生的时间、地点和行为决定是 否允许访问继续进行C对于同一用户不同场所所赋予不同的权限D保证绝对安全 4防火墙通常被比喻为网络安全的大门,但它不能(D) A阻止基于IP包头的攻击B阻止非信任地址的访问C鉴别什么样的数据包可以进出企业内部 网D阻止病毒入侵 简答题 1什么是网络安全?网络中存在哪些安全威胁? 答:网络安全是指系统的三硬件,软件及其系统中的数据安全。计算机网络系统安全面 临的威胁主要表现在以下几类:1非授权访问2泄露信息3破坏信息4拒绝服务5计算机病毒 。 2常见的网络安全组件有哪些?分别完成什么功能? 答:网络安全组件包括物理,网络和信息。物理安全是指用装置和应用程序来保护计算 机和存储介质的安全,主要包括环境安全,设备安全和媒体。网络安全是指主机,服务 器安全,网络运行安全,局域网安全以及子网安全,要实现这些安全,需要内外网隔离 ,内部网不同网络安全域隔离,及时进行网络安全检测,计算机网络进行审计和监控, 同时更重要的是网络病毒和网络系统备份。信息安全就是要保证数据的机密性,完整性 ,抗否认性和可用性。 3安全工作的目的是什么?如何进么安全策略的实施? 答:网络安全的目的是使用访问控制机制使非授权用户"进不来",使用授权机制使不该 拿的信息"拿不走",使用加密机制信息,即使不慎拿走,未授权实体或进程也"看不懂" ,使用数据完整鉴别使未授权者对数据"改不了"使用审计,监控,防抵赖机制使破坏者 ,抵赖者"逃不脱"。 网络安全 第二章作业 填空题 (1) 在密码学中通常将源信息称为___明文_____,将加密后的信息称为__密文______。这 个变换处理过程称为___加密_____过程,它的逆过程称为___解密_____过程。 (2) DES算法加密过程中输入的明文长度是____6____位,整个加密过程需经过___4___轮的 子变换。 (3) 常见的密码技术有__对称密码体制______、__公钥密码体制______和___数字签名技术 _____。 (4) 认证是对__通信对证______的验证;授权是验证__用户______在系统中的权限,识别 则是判断通信对象是哪种身份。 选择题 (1) 以下不属于对称密码算法的是( D )。 A.IDEA B.RC C.DES D.RSA (2) 以下不属于非对称密码算法特点的是( D )。 A.计算量大 B.处理速度慢 C.使用两个密码 D.适合加密长数据 (3) 对于一个数字签名系统的非必要条件有( D )。 A.一个用户能够对一个消息进行签名 B.其他用户能够对被签名的消息进行认证,以证实该消息签名的真伪 C.任何人都不能伪造一个用户的签名 D.数字签名依赖于诚信 (4) 不属于公钥管理的方法有( D )。 A.公开发布 B.公用目录表 C.公钥管理机构 D.数据加密 简答题 1简述公钥体制与私钥体制的主要区别? 答:公钥体制和私钥体制主要区别于私钥DES算法可能强度不够,易受攻击而公钥体制RS A算法强度很高,但耗费时间很长,可能成为整个系统运行速度的瓶颈,使用在网络上进 行多媒体影像等的传输速度不能满足。 2简要说明DES加密算法的关键步骤。 答:1.在图4.2的左边,64位的明文被修改(排列)以改变位的次序;2.把明文分成两个 32位的块;3.在图中的密码一侧,原始密钥被分成两半;4.密钥的每一半向左循环移位 ,然后重新合并、排列,并扩展到48位,分开的密钥仍然保存起来供以后的迭代使用; 5.在图中的明文一边,右侧32位块被扩展到48位,以便与48位的密钥进行异或(XOR)操 作,在这一步后还要进行另外一次排列6.把第3步和第5步的结果(明文与密钥)进行XO R操作;7.使用置换函数把第6步的结果置换成32位;8.把第2步创建的64位值的左边一半 与第7

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧