簡體   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