簡體   English   中英

哪一個printf()會更快,為什么?

[英]Which of the printf() will be faster and why?

知道了

printf("%*s", 10, "");

與...相同

printf("%10s", "");

其中哪一個更快,更有效且對編譯器更友好?

printf("%*s", 10, "");

那將打印10個空格。

printf("%10s", 10, "");

那是不對的。 當然,您的意思是:

printf("%10s", "");

這還將打印10個空格。

老實說,我不知道哪一個更快,這可能取決於特定的printf實現。 第一個版本必須處理其他參數。 在第二個中,給printf一個int值,它不必從字符序列'1''0'進行解析。

但是我有足夠的信心相信,與將這10個字節的數據寫入輸出設備的成本相比,無論是終端窗口(渲染所選字體代表空格的每個像素),性能上的差異都可能微不足道。到顯示器上),磁盤上的文件(等待讀寫頭移動到位,然后讓磁盤旋轉到要寫入的位置,盡管其中大部分可能是並行完成的),或者網絡連接(您的想法)。

在某些情況下,性能差異很重要。 如果可以一次調用並存儲結果,則不要在循環的每次迭代中調用strlen() 當您可以使用Quicksort時,請勿在大型陣列上使用Bubblesort -或僅調用qsort() ,它已經過優化,使用壽命只有一英寸。

這不是其中一種情況。

相反,寫下最清楚表達您意圖的內容。 如果我知道我恰好需要10個空格,我可能會寫printf("%10s", ""); ; 如果空格數是在運行時確定的,我可以寫printf("%*s", n, "");

而且,如果您編寫更簡單的代碼,則可以在第一次使用時獲得更好的效果。 想象一下,您將花費更多的CPU周期來修復和重新編譯程序。

至於哪個更“編譯友好”,我不確定你是什么意思。 如果您願意做的話,編譯器也不會受到冒犯。

哪一個更快取決於該庫的實現細節。 "%*s"變量從堆棧中拉出了一個附加參數...我希望差異是很小的,尤其是與終端輸出的間接費用相比。

如果需要輸出寬度可變,請使用"%*s" 如果不這樣做,請使用更簡單的"%10s" ,它更易於閱讀。

您始終可以通過編碼檢查結果。

#include<stdio.h>
#include<time.h>

using namespace std;

int main()
{
    double cl = clock();
   for(int i=0;i<100000;i++){
       printf("%*s", 10, "");//3.814
   }
   cl = clock() - cl;
   fprintf( stderr, "%lf\n", cl / CLOCKS_PER_SEC );

 //printf("%10s", "");//3.617
    return 0;
}

我的電腦的時間限制正在被評論。 這可能在不同的電腦上有所不同。 但是我認為你的回答是正確的。

暫無
暫無

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

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