我正在将C ++代码从Linux移植到Windows。在这个过程中,我发现以下行在Windows下(在完全相同的硬件上)慢了大约10倍:
list<char*>* item = new list<char*>[160000];
在Windows上需要大约10毫秒,而在Linux上需要大约1毫秒。请注意,这是平均时间。在Windows上运行此行100次需要约1秒。
在win32和x64上都会发生这种情况,两个版本都在Release中编译,速度通过QueryPerformanceCounter(Windows)和gettimeofday(Linux)进行测量。
Linux编译器是gcc。 Windows编译器是VS2010。
知道为什么会发生这种情况?
答案 0 :(得分:10)
这可能是图书馆实施的一个问题。我希望有一个
大多数情况下使用list
的默认构造函数进行单一分配
不分配任何东西。所以你要测量的是成本
list
的默认构造函数(执行160000)。
我说“试图测量”,因为任何测量都很小 测量时钟抖动和分辨率比测量代码更多 执行时间。你应该将它放在循环中,以执行它 经常足以获得几秒钟的运行时间。当你 这样做,你需要采取预防措施,以确保编译器 没有优化任何东西。
在Linux下,您希望至少使用clock()
进行衡量;墙
从gettimeofday
获得的时间时间非常依赖于其他内容
碰巧发生在同一时间。 (不要在Windows下使用clock()
,
然而。 Windows实现已破坏。)
答案 1 :(得分:2)
我认为这条指令在两个操作系统中都花费的时间更少(无论如何)。在这种情况下,您可能需要花费很少的时间来测量计时器的分辨率。