与linux相比,cygwin中的c++程序运行时间较长
Long run time for c++ program in cygwin compared to linux
我有一个c++程序,它在cygwin中运行需要很长时间,而在linux机器上运行需要很快的时间。我认为这可能是内存问题,并试图打印使用的内存,这就是我所看到的:
Linux
虚拟内存:5072 KB,常驻集大小(RSS):1064 KB
Cygwin
虚拟内存:7672 KB,常驻集大小(RSS):108928 KB
有人能帮我理解造成这种差异的原因吗?cygwin运行在一台64位windows&和3 GB内存。有一些旧的"C"代码在程序中执行malloc。将这些转换为标准c++容器会有帮助吗?
Cygwin在Windows的上提供了一个POSIX兼容层。这肯定比针对本机操作系统CRT构建的代码要慢。
如果您的代码是标准C或C++,请使用MSVC或MinGW/GCC重新编译它,然后进行比较。
另一方面,malloc
与new
不是问题。堆分配非常昂贵。
可能重要的是,Windows堆分配通常比Linux的实现更昂贵。这种差异的影响取决于您的代码。
正如rubenvb所说,你不能真的说没有看到代码-但是:
内存量是不可预测的,可能是cygwin启动器或操作系统决定为cygwin作业分配大量内存,因为内存没有被使用。因此,cygwin应用程序未来的内存分配将更快。Linux报告内存使用情况的方式也有问题,它会进行视光分配,所以如果你分配了1Gb的内存,那么在使用之前,内存实际上不会锁定到该进程,并且任务不会显示为使用1Gb。
有些任务在Unix系统上非常便宜,但在Windows体系结构上非常慢。最臭名昭著的是fork(),它在Unix应用程序上很常见,但在Windows 上是个坏主意
相关文章:
- 如何通过cpp程序运行shell脚本
- 用时钟测量程序的运行时间
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 如何执行用 C++ 编写的程序的运行时间?
- 如何优化C++键值程序以获得更快的运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- 如何在以下C程序中计算运行时间内存和最大数据存储器使用情况
- 使用Clock()函数测量程序的运行时间
- 测量 C++ 多线程程序中的运行时间
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- 将一个大文件加载到内存中并在程序的所有运行时间内保持它是错误的
- 为什么我的C++程序使用的系统时间比运行时间多
- 与linux相比,cygwin中的c++程序运行时间较长
- 如何分析程序运行时间
- 计算并行程序的运行时间和cpu时间
- LoadBitmap在程序运行一段时间后返回NULL
- 使用 Unix 程序时间计算每次迭代的程序运行时间
- 查找c++中程序的运行时间