为什么msvcrt(非常非常)慢?

时间:2015-04-29 20:37:26

标签: c windows cygwin libc msvcrt

我特别询问旧的msvcrt.dll。微软是否在更新版本的Windows中更新了该库?或者是在Windows 98发行版中可以找到的完全相同的库?

我使用测试程序对Cygwin测试msvcrt,该程序通过带有互斥锁和信号量的单链表阻塞队列多次调用malloc。通过ifdef,程序可以编译为使用Posix函数,或者使用Windows API调用。当MinGW使用WinAPI编译时,它唯一的依赖是kernel32.dllntdll.dllmsvcrt.dll,而当Cygwin使用Posix函数编译时,程序将取决于{{1} }。

我起初只是假设Cygwin版本运行较慢,因为Posix函数有额外的仿真层;它必须将它们转换为WinAPI调用。但它的机器运行速度似乎比MinGW编译的原生二进制文件快4倍。

Cygwin的文档声明它使用了一个名为newlib的不同libc,当然Cygwin编译的二进制文件似乎并不依赖于msvcrt。那么这会产生巨大的速度差异吗?

我之前也经历过,当一个C程序调用数百万cygwin1.dll时,一个依赖于malloc的程序将比其他任何程序运行慢很多,具体取决于较新的msvcrt.dll。它们甚至比在虚拟机linux下运行的相同程序运行得慢。

msvcrXX.dll出了什么问题?我应该尽可能避免吗?

0 个答案:

没有答案