在编写Win32 C/C++代码时,是否有任何优势(例如性能?)使用特定于Windows的函数,如lstrcpyn或CopyMemory,而不是相应的CRT函数(除了CRT函数的可移植性之外)?
发布于 2012-01-21 17:20:35
至少一些CRT函数在内部使用Win32函数。此外,CRT还需要额外的初始化(例如,strtok等函数的线程特定数据)和清理,这可能是您不希望发生的。
你可以创建一个普通的Win32应用程序,而不需要依赖于任何其他的东西,包括CRT (就像你可以使用NTDLL.DLL创建一个普通的NT应用程序一样--我认为smss.exe就是这样一个进程)。
话虽如此,我认为对于大多数应用程序来说,这并不重要。
更新由于人们似乎对单个函数的差异如此关注,特别是memcpy和CopyMemory,我想补充一句,并不是所有的CRT函数都是Win32函数的包装器。当然,有些可以在没有任何Win32帮助的情况下实现(实际上memcpy就是一个很好的例子),而另一些(明智地)不能。我相信@Merdad在他的回答中暗示了这一点。
因此,抛开可移植性不谈,我不认为性能是支持或反对使用CRT的下一个最佳理由。您应该选择最适合的,通常是CRT。而且,在您看起来合适的地方使用单独的Win32函数(具有CRT等效项)也没有什么可反对的。
发布于 2012-01-21 17:25:48
这取决于功能和您的需求。
对于像memcpy这样的东西,选择特定于Windows的版本是没有任何意义的。坚持使用标准C语言,以保持它的简单和可移植性。
对于像mbstowcs这样的其他东西,您可能需要改用像MultiByteToWideChar这样的东西--这取决于您需要什么功能。
就我个人而言,如果可能的话,我选择C版本,之后只选择Win32版本--因为如果代码可以移植,那么就没有理由编写特定于Windows的代码。
https://stackoverflow.com/questions/8951775
复制相似问题