admin管理员组文章数量:1613757
对此问题的解决方案可以在问题
Executable runs faster on Wine than Windows — why?中找到.Glibc的floor()可能是根据系统库实现的.
我有一个非常小的C程序(~100行)用于物理模拟.我在同一台计算机上的Ubuntu Oneiric和Windows XP上用gcc 4.6.1编译了它.我使用了完全相同的命令行选项(相同的makefile).
奇怪的是,在Ubuntu上,该程序的完成速度比在Windows上快得多(约7.5秒对13.5秒).在这一点上,我认为这是编译器的差异(尽管使用相同的版本).
但更奇怪的是,如果我在葡萄酒下运行Windows可执行文件,它仍然比在Windows上更快(我得到11秒“真实”和7.7秒“用户”时间 – 这包括葡萄酒创业.)
我糊涂了.当然,如果在同一个CPU上运行相同的代码,则时间应该没有差别.
这可能是什么原因?我能做错什么?
程序执行最小I / O(输出单行),并且仅使用来自STL的固定长度向量(即,不应涉及系统库).在Ubuntu上我使用了默认的gcc,在Windows上使用了Nuwen distribution.我在进行基准测试时验证了CPU使用率接近于零(我关闭了大多数程序).在Linux上我用时间来计时.在Windows上我使用timethis.exe.
UPDATE
我做了一些更精确的计时,比较了Windows XP,Wine和Linux上gcc和msvc编译程序的不同输入(运行时必须与输入成比例)的运行时间.所有数字均以秒为单位,是至少3次运行的最小值.
在Windows上,我使用timethis.exe(挂机时间),在Linux和Wine上我使用了时间(CPU时间). (timethis.exe在Wine上断了)我确保没有其他程序使用CPU并禁用了病毒扫描程序.
gcc的命令行选项是-march = pentium -m -Wall -O3 -fno-exceptions -fno-rtti(即异常被禁用).
我们从这些数据中看到的是:
>差异不是由于过程启动时间,因为运行时间与输入成正比
>运行Wine和Windows之间的区别只存在于gcc编译的程序,而不是msvc编译的程序:它不能被其他程序在Windows上占用CPU或者timethis.exe被破坏.
版权声明:本文标题:linux系统比win系统快,c – Linux上的程序速度比Windows快 – 为什么? 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728658073a1168390.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论