与linux相比,cygwin中的c ++程序运行时间长

时间:2012-03-09 16:40:59

标签: c++ runtime cygwin

我有一个c ++程序,需要很长时间才能在cygwin上运行而不是在Linux机器上快速周转。我认为这可能是一个内存问题,并试图打印使用的内存,这是我看到的:

的Linux

虚拟内存:5072 KB,常驻集大小(RSS):1064 KB

的Cygwin

虚拟内存:7672 KB,驻留集大小(RSS):108928 KB

任何人都可以帮我理解导致这种差异的原因吗? cygwin在64位Windows& amp;笔记本电脑上运行。和3 GB内存。有一些旧的“C”代码在程序中执行malloc。将这些转换为标准c ++容器会有帮助吗?

2 个答案:

答案 0 :(得分:3)

Cygwin在Windows上提供POSIX兼容层。这肯定比针对本机OS CRT构建的代码慢。

如果您的代码是标准C或C ++,请使用MSVC或MinGW / GCC重新编译它,然后进行比较。

另一方面,malloc vs new不是问题。堆分配很昂贵。

可能重要的是Windows堆分配通常比Linux实现更昂贵。这种差异的影响取决于您的代码。

答案 1 :(得分:0)

正如rubenvb所说,如果没有看到代码,你就无法说出来 - 但是:

内存量是无关紧要的,可能是cygwin启动程序或操作系统决定只为cygwin作业分配很多内存,因为该内存未被使用。因此,cygwin应用程序未来的内存分配将更快。 Linux报告内存使用的方式也存在问题,它会进行光学分配,所以如果你分配一个内存的Gb,那么在使用内存之前,内存不会被锁定到该进程,并且任务不会显示为使用1Gb。 / p>

有些任务在Unix系统上非常便宜,但在Windows体系结构上却非常慢。最臭名昭着的是fork(),它在Unix应用程序中非常常见,但在Windows上是一个坏主意