簡體   English   中英

printf性能:最好使用“%d”或“%c”表示單位數字

[英]printf performance: Better to use “%d” or “%c” for single digit numbers

我正在打印有關結構的信息,該結構僅包含將成為單個數字的信息(小索引和char主要充當bool)。

我希望我的printf調用盡可能高效。 那么使用普通的%i / %d格式說明符會更好'0' ,或者更好的是使用%c並在數字中添加0x30'0' ),因為那時不需要對printf進行任何格式化去做?

編輯/澄清:我已經介紹了一些嘗試這兩種技術的小程序, %c可以更快。 如果這是生產代碼,我會堅持%d ,但這是專門針對基於速度的比賽。 (對不起,因為之前不清楚)。

確切知道的唯一方法是對兩個版本進行編碼並對其進行分析(或比較生成的機器代碼)。 話雖如此,我懷疑你會發現運行時性能有很大差異。 現代編譯器是智能的,標准庫實現被調整為盡可能高效。 很可能你的printf實現已經對單位數整數進行了特殊的案例處理,這與你提出的類似。 與首先調用 printf的開銷相比,所有這些都在噪聲中。

代碼應按重要性順序排列:

  1. 正確 - 它完成它應該做的一切, 而不應該做任何事情;
  2. 堅固 - 如果有人看起來很有趣,它不應該摔倒並死亡;
  3. 安全 - 它不是惡意軟件向量,它不會暴露任何不應該的數據;
  4. 可維護 - 一些可憐的schmuck最終將不得不更改此代碼以添加功能(或修復缺陷);
  5. 高效 - 它不應占用完成給定任務所需的任何空間或時間,這通常是通過選擇算法和數據結構而不是任何特定的微優化來驅動的。

我認為你的方法使你的代碼不易維護,因為這是實現給定結果的一種非顯而易見的方法。

由於您要打印整數,請使用%d ,這樣可以提高可讀性。

使用其中一個不會以任何顯着的方式影響性能。

如果您的應用程序的瓶頸確實是打印階段,那么考慮使用另一種方法而不是printf() 一些想法: 使用fwrite()優化stdout或POSIX write() ,如@YoYoYonnY建議的那樣。

通常,與計算相比,stdout中的打印相對較慢,例如......

HyperTip:過早優化是邪惡的根源 - D. Knuth。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM