Win32 API函数与CRT对应函数(例如CopyMemory与memcpy)

时间:2012-01-21 08:54:25

标签: c++ c winapi

在编写Win32 C / C ++代码时,使用Windows专用函数(如lstrcpynCopyMemory而不是相应的CRT函数(除了CRT的可移植性)是否有任何优势(例如性能?)函数)?

2 个答案:

答案 0 :(得分:8)

至少有一些CRT函数在内部使用Win32函数。此外,CRT还需要额外的初始化(例如,strtok等函数的特定于线程的数据)和清理,您可能不希望发生这种情况。

你可以创建一个简单的Win32应用程序,而不依赖于其他任何东西,包括CRT(很像你可以使用NTDLL.DLL创建一个普通的NT应用程序 - 我认为{{1} Windows是这样一个过程BTW)。

话虽如此,我认为对于大多数无关紧要的应用程序而言。

更新由于人们似乎对各个功能的差异如此着迷,特别是smss.exememcpy,我想补充一点不是 CRT中的所有函数都是Win32中的函数的包装器。当然,有些可以在没有任何Win32帮助的情况下实现(实际上CopyMemory就是一个很好的例子),而其他人(明智地)则不能。我相信@Merdad在他的回答中暗示了一些东西。

因此,除了可移植性之外,我认为性能不是使用CRT的下一个最佳参数。 你应该选择最合适的,通常是CRT。并且没有什么可以反对使用单独的Win32函数(使用CRT等效函数),你觉得合适。

答案 1 :(得分:1)

这取决于功能和您的要求。

对于像memcpy这样的内容,选择特定于Windows的版本没有任何无论。坚持使用标准C,以保持简单和便携。

对于mbstowcs等其他内容,您可能需要使用MultiByteToWideChar之类的内容 - 具体取决于您需要的功能。

我个人会尽可能使用C版本,之后只能使用Win32版本 - 因为在可以便携式编写时,没有理由编写特定于Windows的代码。