鱼C论坛

 找回密码
 立即注册
查看: 1710|回复: 21

[已解决]为什么32位的程序跑的快,64位的程序跑的反而慢呢???

[复制链接]
发表于 2023-7-28 21:08:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Frog_Belly 于 2023-7-28 21:11 编辑

刚学C语言一个月,尝试写了一个跑分程序:
#include<stdio.h>
#include<time.h>
int main()
{
        clock_t st=clock();
        int a=0;
        while (clock()-st<=1000)
        {
                ++a;
        }
        printf("这台电脑一秒钟可以执行 %d 次运算", a);
        getchar();
        return 0;
}
结果我用32位编译器编译后运行得出是1亿左右,但是64位编译器编译后运行得出仅有2千万,有没有懂点的大佬来解释一下原因
最佳答案
2023-7-28 21:09:02
在你的代码中,你尝试了一个简单的跑分程序来测试计算机在一秒钟内可以执行多少次运算。你观察到在32位编译器下,运行结果大约是1亿次运算,而在64位编译器下仅有2千万次,你想知道其中的原因。

这个差异是由于32位和64位程序的底层数据模型和运行环境不同造成的。

在32位编译器下,指针和整数都是32位长,意味着每次运算处理的数据量较小,有可能使得一秒钟内完成的运算次数更多。而在64位编译器下,指针和整数都是64位长,一次运算处理的数据量更大,可能导致在一秒钟内完成的运算次数较少。

另外,由于64位程序使用更长的指针和数据类型,会占用更多的内存空间。这可能导致在缓存大小有限的情况下,处理数据的效率降低,从而影响程序的运行速度。

但值得注意的是,64位程序的优势在于可以处理更大范围的数据,允许更大的内存访问和更高精度的运算。在需要处理大型数据或执行复杂计算时,64位程序通常会表现更优。

对于你的简单跑分程序来说,32位程序可能因为数据量较小,导致在一秒钟内能够完成更多的运算,而64位程序由于数据量较大,在同一时间内完成的运算次数较少,因此看起来似乎是32位程序"快",而64位程序"慢"。

总结一下,32位和64位程序的运行速度差异主要取决于程序本身的特性和数据处理量的大小。在实际开发中,选择32位或64位程序应该根据需求和目标来决定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-28 21:08:55 | 显示全部楼层
原因是因为64位程序的整数运算速度变慢。

在32位系统中,整数的基本数据类型是32位,而在64位系统中,整数的基本数据类型是64位。64位整数在进行运算时会占用更多的内存空间,并且处理器可能需要更多的时钟周期来完成相同的运算操作。因此,相同的代码在32位和64位系统上执行时,64位程序可能会比32位程序慢。

在你的示例代码中,当你使用64位编译器编译后运行时,由于整数类型是64位,每次循环执行的运算操作次数较少,导致最终结果较小。而在32位编译器下,整数类型是32位,每次循环执行的运算操作次数较多,最终结果较大。

另外,需要注意的是,不同编译器可能对代码进行了优化,因此可能会对运行结果产生影响。此外,处理器架构、编译器设置等因素也可能对运行速度产生影响。

希望对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:09:02 | 显示全部楼层    本楼为最佳答案   
在你的代码中,你尝试了一个简单的跑分程序来测试计算机在一秒钟内可以执行多少次运算。你观察到在32位编译器下,运行结果大约是1亿次运算,而在64位编译器下仅有2千万次,你想知道其中的原因。

这个差异是由于32位和64位程序的底层数据模型和运行环境不同造成的。

在32位编译器下,指针和整数都是32位长,意味着每次运算处理的数据量较小,有可能使得一秒钟内完成的运算次数更多。而在64位编译器下,指针和整数都是64位长,一次运算处理的数据量更大,可能导致在一秒钟内完成的运算次数较少。

另外,由于64位程序使用更长的指针和数据类型,会占用更多的内存空间。这可能导致在缓存大小有限的情况下,处理数据的效率降低,从而影响程序的运行速度。

但值得注意的是,64位程序的优势在于可以处理更大范围的数据,允许更大的内存访问和更高精度的运算。在需要处理大型数据或执行复杂计算时,64位程序通常会表现更优。

对于你的简单跑分程序来说,32位程序可能因为数据量较小,导致在一秒钟内能够完成更多的运算,而64位程序由于数据量较大,在同一时间内完成的运算次数较少,因此看起来似乎是32位程序"快",而64位程序"慢"。

总结一下,32位和64位程序的运行速度差异主要取决于程序本身的特性和数据处理量的大小。在实际开发中,选择32位或64位程序应该根据需求和目标来决定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:09:02 | 显示全部楼层
32位程序和64位程序在运行速度上有差异的原因主要有两个方面:数据长度和内存访问。

1. 数据长度:32位程序使用32位(4字节)的指针和数据类型,而64位程序使用64位(8字节)的指针和数据类型。在某些情况下,处理更长的数据需要更多的时间。例如,在循环中进行迭代操作时,64位程序可能需要更多的时钟周期来完成一次迭代,因为它需要处理更多的数据。

2. 内存访问:64位程序由于使用了更大的指针和数据类型,会占用更多的内存空间。当程序需要频繁地读取或写入内存时,这可能导致缓存不命中(cache misses)。缓存不命中会导致从主内存读取数据的延迟增加,从而影响程序的性能。

在你提供的代码中,程序并没有涉及到大量的数据操作,因此第一个原因对于运行时间的差异影响较小。而第二个原因可能是造成32位程序相对较快的主要原因,因为32位程序所使用的内存空间较小,更容易被缓存所命中。

总的来说,并不能简单地说32位程序一定比64位程序快或者慢,因为这取决于具体的情况。在某些情况下,64位程序可能会更快,特别是在处理大量数据或需要使用64位整数等特定情况下。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:10:27 | 显示全部楼层
哇,大家都好热情,一下子就有人回复了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:11:48 | 显示全部楼层
在32位和64位程序之间的运行速度差异主要取决于以下几个因素:

1. 数据模型和指针大小:32位程序的指针和整数长度为32位,而64位程序的指针和整数长度为64位。这意味着在一次运算中,64位程序需要处理更多的数据量。

2. 内存使用:由于64位程序使用更长的指针和数据类型,它们通常会占用更多的内存空间。在有限的缓存情况下,处理更大的数据量可能导致效率降低,从而影响程序的运行速度。

需要注意的是,64位程序在处理大型数据或进行复杂计算时表现更优。它们可以处理更大范围的数据,允许更大的内存访问和更高精度的运算。

对于你提供的简单跑分程序来说,由于数据量较小,32位程序能够在一秒钟内完成更多的运算,而64位程序由于处理更大的数据量,运算次数相对较少,所以看起来似乎32位程序"快",而64位程序"慢"。

总结起来,选择32位或64位程序应根据实际需求和目标来决定。在某些情况下,32位程序可能更适合处理较小的数据量和对内存要求较低的场景,而64位程序通常适用于处理更大数据范围和复杂计算的需求。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:12:00 | 显示全部楼层
Frog_Belly 发表于 2023-7-28 21:10
哇,大家都好热情,一下子就有人回复了

你不知道而已,这是脚本,根本不是人工打字的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:12:01 | 显示全部楼层
Frog_Belly 发表于 2023-7-28 21:10
哇,大家都好热情,一下子就有人回复了

脚本,ChatGPT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:13:15 | 显示全部楼层
本帖最后由 Frog_Belly 于 2023-7-28 21:14 编辑
sfqxx 发表于 2023-7-28 21:12
你不知道而已,这是脚本,根本不是人工打字的


原来是脚本,我之前从liuhongrun听说这种都是chatgpt脚本回复的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:13:49 | 显示全部楼层

没想到还真是有脚本存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:14:16 | 显示全部楼层
Frog_Belly 发表于 2023-7-28 21:13
原来是脚本,我之前从luihongrun听说这种都是chatgpt脚本回复的

@liuhongrun2022

《luihongrun》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:14:27 | 显示全部楼层
sfqxx 发表于 2023-7-28 21:14
@liuhongrun2022

《luihongrun》


啊,打错字了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:15:16 | 显示全部楼层
在你的代码中,你尝试了一个简单的跑分程序来测试计算机在一秒钟内可以执行多少次运算。你观察到在32位编译器下,运行结果大约是1亿次运算,而在64位编译器下仅有2千万次,你想知道其中的原因。

这个差异是由于32位和64位程序的底层数据模型和运行环境不同造成的。在32位编译器下,指针和整数都是32位长,意味着每次运算处理的数据量较小,有可能使得一秒钟内完成的运算次数更多。而在64位编译器下,指针和整数都是64位长,一次运算处理的数据量更大,可能导致在一秒钟内完成的运算次数较少。

另外,由于64位程序使用更长的指针和数据类型,会占用更多的内存空间。这可能导致在缓存大小有限的情况下,处理数据的效率降低,从而影响程序的运行速度。但值得注意的是,64位程序的优势在于可以处理更大范围的数据,允许更大的内存访问和更高精度的运算。在需要处理大型数据或执行复杂计算时,64位程序通常会表现更优。

对于你的简单跑分程序来说,32位程序可能因为数据量较小,导致在一秒钟内能够完成更多的运算,而64位程序由于数据量较大,在同一时间内完成的运算次数较少,因此看起来似乎是32位程序"快",而64位程序"慢"。

总结一下,32位和64位程序的运行速度差异主要取决于程序本身的特性和数据处理量的大小。在实际开发中,选择32位或64位程序应该根据需求和目标来决定。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:17:01 | 显示全部楼层
sfqxx 发表于 2023-7-28 21:14
@liuhongrun2022

《luihongrun》
求助者们,你发的帖子前2-4楼都是脚本,请勿给最佳!((ctrl)+(fn)+f5刷新看我头像)

果然印证了,想必这位应该是在论坛很长时间的大佬吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:17:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:17:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:19:38 | 显示全部楼层
Frog_Belly 发表于 2023-7-28 21:17
果然印证了,想必这位应该是在论坛很长时间的大佬吧

也就是最近摸出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:20:04 | 显示全部楼层
sfqxx 发表于 2023-7-28 21:19
也就是最近摸出来的


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 21:20:36 | 显示全部楼层

请说:我的头像是谁?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 21:22:39 | 显示全部楼层
sfqxx 发表于 2023-7-28 21:20
请说:我的头像是谁?

你干嘛,这是只因,xxs都只因到的好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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