在编写Win32 C / C ++代码时,使用Windows专用函数(如lstrcpyn
或CopyMemory
而不是相应的CRT函数(除了CRT的可移植性)是否有任何优势(例如性能?)函数)?
答案 0 :(得分:8)
至少有一些CRT函数在内部使用Win32函数。此外,CRT还需要额外的初始化(例如,strtok
等函数的特定于线程的数据)和清理,您可能不希望发生这种情况。
你可以创建一个简单的Win32应用程序,而不依赖于其他任何东西,包括CRT(很像你可以使用NTDLL.DLL
创建一个普通的NT应用程序 - 我认为{{1} Windows是这样一个过程BTW)。
话虽如此,我认为对于大多数无关紧要的应用程序而言。
更新由于人们似乎对各个功能的差异如此着迷,特别是smss.exe
与memcpy
,我想补充一点不是 CRT中的所有函数都是Win32中的函数的包装器。当然,有些可以在没有任何Win32帮助的情况下实现(实际上CopyMemory
就是一个很好的例子),而其他人(明智地)则不能。我相信@Merdad在他的回答中暗示了一些东西。
因此,除了可移植性之外,我认为性能不是或使用CRT的下一个最佳参数。 你应该选择最合适的,通常是CRT。并且没有什么可以反对使用单独的Win32函数(使用CRT等效函数),你觉得合适。
答案 1 :(得分:1)
这取决于功能和您的要求。
对于像memcpy
这样的内容,选择特定于Windows的版本没有任何无论。坚持使用标准C,以保持简单和便携。
对于mbstowcs
等其他内容,您可能需要使用MultiByteToWideChar
之类的内容 - 具体取决于您需要的功能。
我个人会尽可能使用C版本,之后只能使用Win32版本 - 因为在可以便携式编写时,没有理由编写特定于Windows的代码。