2014-11-23 164 views
1

我正在尋找一種將小型計算密集型程序編譯爲機器代碼可執行文件的方法。是否有編譯爲機器代碼的C C++ C#編譯器

該方案目前正在寫在微軟的Visual Studio C#的環境,但我也同樣高興做到這一點在C,C++或任何類似的變體,如果它導致我得到一個執行的機器代碼。

(我也有SharpDevelop的環境)

我想避免運行時的開銷,我想到的是通過使用一個運行時JIT編譯器發生。

我希望只有我將永遠使用該程序,大概只有我的機器(S),所以我沒有有關部署的考慮擔心。

+1

你是什麼意思?當然C和C++編譯爲機器碼。 – OldProgrammer 2014-11-23 23:13:42

+0

如果您要求彙編器輸出查看,以前曾詢問/回答過。 http://stackoverflow.com/questions/840321/how-can-i-see-the-assembly-code-for-a-c-program – 2014-11-23 23:16:32

+2

你提到的所有編譯器都會創建執行機器代碼的程序。機器代碼生成的確切時刻恰恰不同。用C#有多個選項來確定何時。使用抖動可能是最快的方法。如果不是,那麼你提前使用ngen.exe來生成機器碼。或者使用使用C++編譯器後端的.NET Native,當您不想共享時可能不在卡片中。所以這並不重要,你只關心你在機器週期上花了多少時間。你的耳朵之間的那些。 – 2014-11-23 23:18:13

回答

0

所有的C/C++編譯器編譯爲機器碼,這就是爲什麼你可以直接尋址的內存,有內聯彙編,並關心你的編譯系統上的sizeof(int)的。

+1

確實存在偶爾的C++解釋器。 – 2014-11-24 00:15:10

+0

除了作爲實驗玩具之外,C++中間體還有什麼用途?你真的認爲這值得投票嗎? – 2014-11-24 06:44:41

+0

(不是我的downvote)很明顯,MSVC++似乎有能力編譯普通的C++代碼(如Hello,World)到.Net。在這種情況下,您不能直接尋址內存或者使用內聯彙編器。 (並且通常它都是未定義的行爲) – MSalters 2014-11-24 11:06:07