2009-11-08 122 views
2

我在寫一組單元測試,將計算出的值寫入文件。每個測試產生一個矩陣矩陣,可容納50,000到500,000個雙打,我總共有128個測試用例組合。C++ ofstream與C++ cout傳輸到文件

是否有參與編寫的cout語句,然後是輸出管道,以文件的任何顯著的開銷,或者我會過得更好直接寫入使用ofstream的文件?

回答

8

這將取決於您的系統和環境。這可能幾乎沒什麼區別,但只有一種方法可以肯定:嘗試兩種方法並衡量它們。

1

由於所涉及的尺寸是如此之大,我假設這些文件並不意味着由人類閱讀?只要確保將它們寫成二進制文件而不是人類可讀的文本,因爲這會比使用ofstream或管道cout之間的差異差得多。

是否意味着你使用ofstream或不我不知道。我從來沒有寫二進制來清點,所以我不能說這是否是可能的...

+0

嗯,另一個答案,另一個匿名downvote。如果我不知道更好,我會說有人懷恨在心地跟着我...... – Troubadour 2009-11-08 17:32:21

0

正如查爾斯·貝利說,它的實現依賴;接下來的主要是用gnu工具鏈實現linux,但我很難想象它在其他操作系統中有很大的不同。

在的libstdC++ 4.4.2:

  • 的fstream的包含底層stdio_filebuf其是basic_filebuf。這個basic_filebuf通過繼承basic_streambuf來包含它自己的緩衝區,並且實際上包含一個__basic_file,它本身包含一個底層的普通C stdio抽象(FILE *或者std :: __ c_file *),在其中刷新緩衝區。

  • COUT,它是一個ostream與本身與C文件抽象標準輸出初始化的stdio_sync_filebuf初始化。 stdio_sync_filebuf調用純C的stdio函數。

僅考慮C++,它出現的一個fstream的可以更有效由於緩衝器的兩個層。

僅考慮C,如果進程使用在文件中重定向的stdout文件描述符分叉,則應該在寫入新打開的文件(fstream結束時執行的操作)或自fd點開始的stdout之間沒有區別到一個文件無論如何(最後cout做什麼)。

如果我是你,我會因爲這是你的意圖使用fstream的。