吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1226|回复: 10

[服务器系统] 【32位程序和64位程序谁速度更快】

[复制链接]
书香 发表于 2024-2-19 18:55 | 显示全部楼层 |阅读模式

本帖最后由 书香 于 2024-2-26 20:22 编辑

这是我们之前提出的一个问题
【32与64位程序的区别】


关于这个问题书香也与其他技术大佬们在各大群里爆发了几次激烈的争辩,最终书香的观点赢得了胜利,嘿嘿

主流的观点是:
①:64位的速度是32位的2倍
②:64位比32位快,但是不一定快2倍
③:64位和32位谁快不一定,分场景
④:书香及部分人的观点是32位一般情况都比64位速度要快

对于这个问题,前后可以说是爆发了激烈的争论,书香被喷的还是很惨的,不过最后能够赢下这场辩论赛并收获新知识,书香觉得很值得
在理论中,64位框架确实比32位框架要快一半,但是这是针对于CPU的运算规则来讲的但是软件的快慢不是CPU说了算的,cpu并不起到绝对作用,也就是说,你运算很快,但是你先运算完又怎么样?你先等着我数据存储完毕才能进行下一条指令

①内存地址
我们写代码的时候会使用到变量存储数据,变量的数据是存储在内存条里面的,64位地址长度是64,32位地址长度是32,这意味着运算时要补32个0,这极大的消耗了设备的性能
fakename.png


②硬件问题,这就是说64位程序的算力要是32位的2倍前提是硬件必须支持
fakename.png

实测:

接下来辩论进入白热化阶段,越来越多的大佬开始参与这个话题,于是开始跑代码
fakename.png

上图的代码是由VS2019生成工具这个编译器编译的,这个编译器可以说代表了当前程序开发执行速度这一块的最高水平了,大家自然是没有意见,本程序进行了100亿次的循环运算,最后32位程序耗时360毫秒,64位程序耗时781毫秒,多次测试结果相差不大,随后又进行了一些常用指令的运算测试,基本是32位程序更胜一筹

随后,又引来了一名大佬的加入,其表示研究过这个问题,并引用了下面大佬的意见
fakename.png

提示1:32位程序和64位程序不是2套代码,你可以选择打包成32位和64位,说明这个问题是怕一些朋友觉得代码写法不一样不能对比

提示2:32位和64位指的是地址长度,不是32位系统能同时执行32条指令,64位系统能同时执行64条线程,我觉得这个说法比较炸裂

结论:
32位程序一般情况运行速度是要比64位快的,但是不是说32位程序的运行速度一定比64位要快,分场景的,在小部分情况了64位比32位要快。至于说64位的运行速度是32位的2倍那是基本上不存在的事

那为什么很多人觉得64位程序很牛逼,这个问题之前讲过了,因为32位程序理论支持最大内存就是4G,所以一些大型游戏和程序都是64位的,所以不是64位程序NB,而是人家这个程序NB只能打包成64位,这么多牛逼的程序都是64位的,所以觉得64位比32位牛逼很多


欢迎大家对于这个问题留下自己的见解,也可以网上搜索相关资料进行讨论

重点:
本文不在于讨论32和64谁更快,讨论这个问题是为了给新手提供条参考建议,大家开发的程序是否有没有必要强制去打包成64位,所以论证的核心点是64位程序是不是比32位快很多人认为64的程序实际处理速度是32位的2倍,所以总想着自己的程序必须64位,结果耗时费力,最后可能效果反而更慢,很多人问过我自己的程序升级成64要多少钱这个问题至于什么时候什么场景谁更快这个只能算闲谈了

所以我想表达的一个观点是,对于各位编程爱好者来说,你的程序没有必要去升级成64,你认为升级会速度加倍,实际上很有可能会减慢(至于到底有多大概率会减慢,我个人的意见是超过50%,具体多少还有待讨论)

(点击返回课程目录https://www.52hb.com/thread-58658-1-1.html


评分

参与人数 3HB +3 THX +1 收起 理由
派派克 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
才感到附属国 + 1
ok8953 + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
终极帅哥 发表于 2024-2-19 19:01 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
boot 发表于 2024-2-19 20:25 | 显示全部楼层

请提供“运行100亿次”程序的源代码。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 书香 发表于 2024-2-19 20:37 | 显示全部楼层

本帖最后由 书香 于 2024-2-19 20:47 编辑
boot 发表于 2024-2-19 20:25
请提供“运行100亿次”程序的源代码。

可以的,就是很简单的计次循环,然后循环里自定义一个算法,比如a=a*9-6 (a是当前的循环次数)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2024-2-20 00:04 | 显示全部楼层

谢谢分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
boot 发表于 2024-2-20 03:56 | 显示全部楼层

书香 发表于 2024-2-19 20:37
可以的,就是很简单的计次循环,然后循环里自定义一个算法,比如a=a*9-6 (a是当前的循环次数)
...
④:书香及部分人的观点是32位一般情况都比64位速度要快

这个结论不完全对。当进行复合运算时,64位的速度是32位的两倍。
证明:

32位
2024-02-20_035413.jpg

64位
2024-02-20_035426.jpg

实例:

CalcTest.zip (251.03 KB, 下载次数: 0)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 书香 发表于 2024-2-20 09:21 | 显示全部楼层

本帖最后由 书香 于 2024-2-20 09:47 编辑
boot 发表于 2024-2-20 03:56
这个结论不完全对。当进行复合运算时,64位的速度是32位的两倍。
证明:

你这个数据类型长度不一样了,相当于完全进入了64位的统治领域,32位一次性只能处理4字节数据双精度浮点数类型是8字节的,但是其实单精度浮点数4个字节也够用了,目前其实就是第3点和第4点的辩论


③:64位和32位谁快不一定,分场景
④:书香及部分人的观点是32位一般情况都比64位速度要快

具体测试应该要贴近于常见的代码,如基础运算(变量操作),数据读写(硬盘操作),系统类操作等,我觉得对于一般软件而言,32位的性能是要更优越的,因为32位单次处理的字节数据量已经基本符合要求了,但是64位程序无法在32位的设备上运行(意味着要抛弃32位系统的用户)


所以这篇文章的目的就是说大家软件一般打包成32位即可,不需要非得去打包成64位(很多人一直以为64位程序的实际处理速度是32位的2倍)

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
oawxx 发表于 2024-2-20 23:18 | 显示全部楼层

捕获.PNG 捕获2.PNG
比较32位和64位运行速度感觉就是个伪命题,如上代码中调用处理器指令计算tick,显示x64比x32快,cpuid在寄存器中写入信息是只用了32位。并且除时间计数外并没有使用指针指向。
这也就是意味着,在使用64位处理器指令集时,32位操作大概率会减缓处理器的数据吞吐量。例如SSE、AVX等将会拖慢运行速度

编译器使用:Intel OneAPI C++ 2024编译器(支持x64汇编)

仅为个人观点,欢迎指正
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 书香 发表于 2024-2-21 00:13 | 显示全部楼层

oawxx 发表于 2024-2-20 23:18
比较32位和64位运行速度感觉就是个伪命题,如上代码中调用处理器指令计算tick,显示x64比x32快,cpuid在寄 ...

这个问题关键就在于处理的数据是多少位的,我觉得大多数情况下(大家基本都是个人或几个人的开发),32位数据够用了

实际上,讨论这个问题是为了给新手提供条参考建议,大家开发的程序是否有没有必要强制去打包成64位,所以论证的核心点是64位程序是不是比32位快(很多人认为64的程序实际处理速度是32位的2倍,所以总想着自己的程序必须64位,结果耗时费力,最后可能效果反而更慢,很多人问过我自己的程序升级成64要多少钱这个问题)至于什么时候什么什么场景谁更快这个只能算闲谈了

所以我想表达的一个观点是,对于各位编程爱好者来说,你的程序没有必要去升级成64,你认为升级会速度加倍,实际上很有可能会减慢(至于到底有多大概率会减慢,我个人的意见是超过50%,具体多少还有待讨论)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
oawxx 发表于 2024-2-21 10:41 | 显示全部楼层

是的,32位升级成64位并不会出现速度成倍的提升,一如visual studio 2019(32位)和visual studio 2022(64位)相比,哪怕是微软也没能让其性能完全提升到一倍以上,只有少部分能提升一倍甚至两倍以上。但绝大多数的提升只有一点点。相对来说开发64位程序提升程序执行速度并不是关键点。主要还是以适应性为主,在微软完全抛弃32位之前,数据吞吐量不大的程序没必要执着于32位和64位之分
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表