簡體   English   中英

編程語言 X 中的一條語句生成多少行機器代碼?

[英]How many lines of machine code are generated by one statement in programming language X?

閱讀一篇關於Lost Programming Skills的文章,作者提出了這個聊天:

我:你需要多少馬力?
瑟:我不知道。
我:讓我們看看,你的主循環中有多少行代碼?
東南:10,000。
我:什么語言?
SE:Fortran
我:好的,Fortran 每行大約 10 行機器代碼,所以每個循環有 100,000 條指令; 循環每秒執行多少次?
SE:每 1/20 秒。
我:好的,那就是 20 x 100,000 = 2mops(這比我們當時的任何東西都快),也許我們最好重新考慮一下。

這讓我想知道,現代語言的數字是多少,比如 Ruby? 如何發現?

在聊天中,他們試圖估計 CPU 性能。 如果您知道 CPU 性能和循環的執行時間,您可以獲得每個循環和每行的 CPU 命令數。 聊天中的計算並不精確。 即使對於 ruby,您也可以進行類似的不精確計算。 請注意,說一個 fortran 行是 10 個 CPU 命令但對於某些循環來說是平均值是錯誤的,這是真的。

估計您的循環在 ruby 中所花費的時間。 在循環時間上乘以 CPU 性能(每秒操作數)。 您將獲得每秒操作數。 將每秒操作數除以循環中的行數。 這就是你的循環價值。

對於 X=" C# ",您可能需要查看更快的托管代碼:了解 Microsoft 的成本 它說,(特定的)現代語言在實際接觸硬件之前已經過大量優化。

我不認為會有一個確切的數字。 說“對於語言 x 編譯的二進制文件每個源代碼行有 y 行”。 但如果你仍然想知道可能是你可以拿一個很大的不。 編譯的代碼和相應的源代碼,並找出每個源代碼行的平均值。 您可以使用任何二進制編輯器打開二進制文件以查看它生成了多少行。 例如。 奧利德

在確定一段代碼需要多長時間執行方面,這甚至不再適用於 Fortran:如果您在 Fortran 90 中編寫此代碼:

SUBROUTINE foo(x, y)
  IMPLICIT NONE
  REAL, DIMENSION(:), INTENT(IN) :: x
  REAL, DIMENSION(:), INTENT(OUT) :: y
  y = EXP(x)
END SUBROUTINE foo

根據 arrays xy的大小,執行y = EXP(x)的行可能需要任意長的時間。 任何帶有向量賦值的語言也是如此。

暫無
暫無

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

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