[英]Passing a template func. as a func. ptr to an overloaded func. - is there a way to compile this code?
[英]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.