簡體   English   中英

我應該如何比較C ++元程序和C代碼? (運行 )

[英]How should I compare a c++ metaprogram with an C code ? (runtime )

我已經將C程序移植到C ++模板元程序。現在,我想比較運行時。 由於C ++程序幾乎沒有運行時,我應該如何比較這兩個程序。
我可以將C運行時與C ++編譯時間進行比較嗎? 還是不具有可比性?

您可以比較任何您想比較的東西。 沒有什么應比較的真實規則。

您可以比較每個版本執行所需的時間,也可以比較編譯每個版本所需的時間。

或者,您可以比較程序的長度或源文件中“ r”字符的數量。 您可以比較每個文件的時間戳。

如何比較兩個程序取決於您要顯示的內容!

如果要顯示一個執行速度快於另一個執行速度,請同時運行兩個執行時間,計算執行時間,然后比較這些數字。

如果要顯示一個編譯速度快於另一個,則需要花費時間來編譯它們。

如果您認為C ++程序的編譯時間與C程序的運行時間之間的關系是相關的,則將它們進行比較。

確定要顯示的內容。 然后,您將知道要比較的內容。

如果我理解正確,那么您已經使用完全基於模板的程序重寫了C程序。 結果,您正在將運行C程序所花費的時間與幾乎不需要時間但僅將結果寫出來的C ++程序進行比較。

在這種情況下,我認為它的可比性不高-最終用戶將看到C程序運行x秒鍾,而C ++立即完成。 但是,開發人員將在幾秒鍾內看到C程序編譯,而在幾秒鍾后C ++編譯。

您可以將C ++的編譯時間與C的運行時間進行比較,如果該應用旨在產生結果並且從不運行兩次,那么可以,您可以通過這種方式比較時間。 如果將程序設計為可以多次運行,則需要比較運行時間。

我只是希望您在C ++模板代碼中放很多注釋:)

PS。 我很好奇-與兩者的編譯時間相比,C語言需要運行多長時間?

由於C ++程序將始終產生相同的結果,因此為什么要麻煩其中任何一個呢? 使用任一程序計算一次結果,然后將兩者替換為:

int main()
{
   printf("<insert correct output here>\n");
   return 0;
}

我認為有意義的是先比較兩個程序的編譯時間,然后是運行時,然后可以計算多少次攤銷了額外的編譯時間。

這就是我想您要嘗試做的:

您尚未說過c程序的作用,因此可以說它以某種指定的精度計算余弦數。 您已將該程序轉換為基於c ++模板的等效程序,該程序執行相同的操作,但在編譯時會產生編譯時的contant值。 這是一件很合理的事情,因為您可能擁有使用“硬編碼”余弦值的算法,並且您不希望使用隨機表。 請參閱本文 ,以獲取用於此目的的實際用法示例(或搜索Blitz和/或Todd Veldhuizen以獲取更多示例)。

因此,在這種情況下,您需要將C ++正弦計算器的編譯時性能與原始C版本的運行時性能進行比較。

直接將C ++源文件的編譯時間與運行C版本的時間進行比較,幾乎可以肯定,這表明編譯時間會明顯變慢。 但是,這並不是一個公平的比較,因為編譯器所做的不僅僅是“執行”模板代碼。

編輯:您可以通過創建c ++程序的副本來補償編譯器的開銷,該副本的某些簡單代碼與模板代碼將生成的代碼等效-即,如果有意義的話,您必須手工編譯模板代碼。 如果您隨后計時該源代碼的編譯時間,則該時間與編譯原始C ++模板化程序的時間之間的差可能只是執行模板所需的時間。

當今的C和C ++編譯器共享相同的后端,因此很可能生成相同的匯編代碼。

C ++只是一個帶有更多注釋的C,在Cplusplusing的同時,您仍然可以制作出不錯的C;)

C只是C ++的老兄。

暫無
暫無

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

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