我無法優化C++程序以實現最快的運行時間。在C++中優化IO
該代碼的要求是輸出2個長整數的差值的絕對值,通過文件輸入到程序中。即:
./myprogram < unkownfilenamefullofdata
文件名是未知的,每行有2個數字,用空格分隔。有一個未知數量的測試數據。我創建了2個測試數據文件。一個人有極端的情況,並且長達5次。至於另一個,我使用了一個Java程序來產生2,000,000個隨機數,並將其輸出到一個timedrun文件 - 18.MB的測試值。
海量文件運行時間爲3.4秒。我需要將其分解爲1.1秒。
這是我的代碼:
int main() {
long int a, b;
while (scanf("%li %li",&a,&b)>-1){
if(b>=a)
printf("%li/n",(b-a));
else
printf("%li/n",(a-b));
} //endwhile
return 0;
}//end main
我跑Valgrind的在我的計劃,而事實證明,很多滯留在讀取和寫入部分。如果我知道我只打算接收一個數字,我會如何將打印/掃描重寫爲最原始的C++格式?有沒有一種方法可以將數字掃描爲二進制數,並通過邏輯運算操作數據來計算差異?我也被告知要考慮寫一個緩衝區,但在搜索網頁6個小時後,嘗試執行代碼,我沒有成功。
任何幫助將不勝感激。
您是否使用優化進行編譯? – Dave 2012-02-11 15:28:21
重定向輸出。 – 2012-02-11 15:30:58
您的程序不會讀取文件,您正在使用重定向將文件內容提供給程序。將文件直接加載到應用程序中,將其完全加載到內存中,然後找到比scanf更低級別的例程來解析它。 – 2012-02-11 15:32:09