在Linux上比Windows更快的相同的程序 – 为什么?

在Linux上比Windows更快的相同的程序 – 为什么?,第1张

概述在Linux上比Windows更快的相同的程序 – 为什么?

在这个问题的解决scheme被发现问题Executable比windows运行得更快 – 为什么? Glibc的floor()可能是以系统库的forms实现的。

我有一个非常小的C ++程序(〜100行)进行物理仿真。 我已经在同一台计算机上的Ubuntu Oneiric和windows XP上使用gcc 4.6.1进行编译。 我使用完全相同的命令行选项(相同的生成文件)。

奇怪的是,在Ubuntu上,程序的完成速度比在windows上快得多(〜7.5s vs 13.5s)。 在这一点上,我认为这是一个编译器的差异(尽pipe使用相同的版本)。

但更奇怪的是,如果我在wine下运行windows可执行文件,它的速度仍然快于windows(我得到了11秒“真实”和7.7秒“用户”时间 – 这包括葡萄酒的启动。

CEdit不显示特殊字符

从中央存储库加载DLL的一种方法

线程等待父

windows手机7 – 只有C#?

C PF_PACKET链路层处理

我很困惑。 当然,如果相同的代码在同一个cpu上运行,那么时间就不会有差别。

这可能是什么原因? 我可能做错了什么?

该程序做最小的I / O(输出一行),只使用STL的一个固定长度的vector (即不应该涉及系统库)。 在Ubuntu上,我使用默认的gcc,并在windows上Nuwen发行版 。 我证实了在进行基准testing时cpu使用率接近于零(我closures了大部分程序)。 在linux上,我使用time进行计时。 在windows上,我用timethis.exe 。

UPDATE

我做了一些更精确的计时,比较windows XP,Wine和linux上gcc和msvc编译程序的不同input(运行时间必须与input成比例)的运行时间。 所有数字都以秒为单位,并且是至less3次运行的最小值。

在windows上,我使用timethis.exe (挂墙时间),在linux和Wine上使用时间(cpu时间)。 (timethis.exe打破了Wine)我确定没有其他程序正在使用cpu并禁用了病毒扫描程序。

gcc的命令行选项是-march=pentium-m -Wall -O3 -fno-exceptions -fno-rtti (即禁用了exception)。

我们从这些数据看到:

差异不是由于进程启动时间所致,因为运行时间与input成正比

在Wine和windows上运行的区别仅在于gcc编译的程序,而不是msvc编译的程序:它不能被其他程序在windows上占用cpu或timethis.exe被破坏。

Qt,linux,GCC:-Wl,-rpath = $ ORIGIN不适用于平台插件xcb

使用olE剪贴板和经典剪贴板的意外/奇怪的结果,还是我错过了什么?

在DWORD中打包值

警告:函数返回局部variables的地址

.Net核心忽略环境variablesDOTNET_SKIP_FirsT_TIME_EXPERIENCE

你会惊讶什么系统库参与。 只要做你的应用程序,看看哪些是使用(好吧,不是那么多,但肯定glibc)。

为了完全信任关于执行速度的发现,您需要按顺序运行您的应用程序几次,并采取平均执行时间。 这可能是因为 *** 作系统加载速度较慢(虽然4s是一个很长的加载时间)。

其他很可能的原因是:

不同的malloc实现

异常处理,如果使用极端可能会导致放缓(windows GCC,MinGW,可能不是最佳的异常处理明星)

依赖于 *** 作系统的初始化:在windows上启动程序时需要完成的工作,而不是在linux上。

大多数这些很容易基准;-)

更新到更新:您现在唯一可以做的就是配置文件。 不要猜测,让一个分析器告诉你在哪里花费时间。 使用gprof和Visual Studio内置分析器,比较不同功能中花费的时间。

在代码中进行基准测试。 也尝试用visual studio进行编译。 在windows上,如果你有像雅虎通这样的应用程序,安装钩子,他们可以很容易地减缓你的应用程序加载时间。

在windows上有:queryPerformanceCounter在linux上:clock_gettime

显然差异是与系统有关的。

您可以使用strace来了解系统调用是如何完成的,例如

strace -o /tmp/yourprog.tr yourprog

然后看看/tmp/yourprog.tr

(如果在windows上存在相同的strace ,请尝试使用它)

也许你的程序正在分配内存(使用mmap系统调用),并且在linux上(甚至在Wine上),内存相关系统调用可能比在windows上更快? 或者其他一些系统调用在windows上的linux上提供更快的功能。

NB。 我对windows一无所知,因为自从1986年以来,我使用Unix系统,自1993年以来使用linux。

总结

以上是内存溢出为你收集整理的在Linux上比Windows更快的相同的程序 – 为什么?全部内容,希望文章能够帮你解决在Linux上比Windows更快的相同的程序 – 为什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1275018.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存