Windows与Linux内存分配/ std :: list构造函数性能

时间:2012-01-26 15:26:41

标签: c++ windows linux stl memory-management

我正在将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。

知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:10)

这可能是图书馆实施的一个问题。我希望有一个 大多数情况下使用list的默认构造函数进行单一分配 不分配任何东西。所以你要测量的是成本 list的默认构造函数(执行160000)。

我说“试图测量”,因为任何测量都很小 测量时钟抖动和分辨率比测量代码更多 执行时间。你应该将它放在循环中,以执行它 经常足以获得几秒钟的运行时间。当你 这样做,你需要采取预防措施,以确保编译器 没有优化任何东西。

在Linux下,您希望至少使用clock()进行衡量;墙 从gettimeofday获得的时间时间非常依赖于其他内容 碰巧发生在同一时间。 (不要在Windows下使用clock(), 然而。 Windows实现已破坏。)

答案 1 :(得分:2)

我认为这条指令在两个操作系统中都花费的时间更少(无论如何)。在这种情况下,您可能需要花费很少的时间来测量计时器的分辨率。