问题的解决方案是在问题上找到的,Executable在Wine上的运行速度比Windows快 - 为什么? Glibc floor()可能是根据系统库实现的.
我有一个非常小的C++程序(~100行)用于物理模拟.我在同一台计算机上的Ubuntu Oneiric和Windows XP上用gcc 4.6.1编译了它.我使用了完全相同的命令行选项(相同的makefile).
奇怪的是,在Ubuntu上,在程序完成多比在Windows(〜7.5 s和13.5 S)更快.在这一点上,我认为这是编译器的差异(尽管使用相同的版本).
但更奇怪的是,如果我跑下酒Windows可执行文件,它仍然快于在Windows(我得到11的"真实"和7.7的"用户"时间 - 这包括酒启动.)
我糊涂了.当然,如果在同一个CPU上运行相同的代码,则时间应该没有差别.
这可能是什么原因? 我能做错什么?
该程序执行最小I/O(输出单行),并且仅使用vectorSTL中的固定长度(即不应涉及系统库).在Ubuntu上我使用了默认的gcc,在Windows上使用了Nuwen发行版.我确认在进行基准测试时CPU使用率接近于零(我关闭了大多数程序).在Linux上我用于time计时.在我使用的Windows上timethis.exe.
UPDATE
我做了一些更精确的计时,比较适用于Windows XP,葡萄酒和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被破坏.