繁体   English   中英

哪个更有效:Win32函数。 或类似的CRT功能。 在VC ++应用中。

[英]Which is more efficient:A Win32 func. or a similar CRT func. in a VC++ app.?

我开始玩win32编程是因为很有趣,因为我喜欢复杂的事物,而且我喜欢编程(这全是Charles Petzold和Jeffrey Richter编写如此漂亮的书的错。)并且可能是因为我对性能代码有所了解。

现在,真正的问题是:我将使用GetEnvironmentVariable()[一个win32 API函数]和getenv()[一个标准CRT函数]的示例。

两者都返回作为参数提供的环境变量的值。

因此,使用哪个函数会更有效率,或者换句话说,哪个具有较短的调用堆栈,哪个更直接?那么想一想。 被称为一百万次。

我相信它们中的任何一个都可以相互映射。我是对的还是我在这里错过了一些东西。

摘要:在为win32 api编程时,如果api和c / c ++库中都提供了提供相同功能的函数,那么我应该使用哪一个?

谢谢。

对于大多数应用程序,使用一个或其他API不太可能成为主要的性能问题。

CRT和C ++标准库已映射到Win32 API,因此使用Win32 Direct会稍微提高效率。 如果您需要编写可移植的C代码,请使用CRT。

在C ++中,最常见的是,使用标准库可以更轻松地生成习惯用法正确的代码,并且超过直接使用Win32所获得的任何边际性能提升。

getenv可能不是一个很好的例子,因为到Win32的映射很简单。 考虑使用Win32 API再现<iostream> ,好的库的好处变得更加明显。

坚持使用CRT。 它映射到WinAPI,但不一定直接映射。 例如,printf()可能映射到WriteConsole,但具有缓冲性能。 如果GetEnvironmentVariable()不需要包装任何代码,则getenv()的性能相同,如果需要(例如缓冲),则CRT将提供它。 它是“正确”,而不是“写入”。

这两个函数的性能可能相似,可能会终止从注册表中读取值。 但更重要的是,没有理由将它们变成严重的性能问题:注册表是一个数据库,如果您需要一次又一次使用注册表中的某些值,则可以将其缓存在某个变量中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM