2014-09-04 88 views
-3

我們可以在不需要磁盤訪問的情況下完全在內存中編譯和運行C/C++程序嗎?編譯並運行內存中的c/C++程序

通常在編輯器中編寫C/C++程序,保存到磁盤(在文件中),然後編譯它。編譯在磁盤上創建可執行文件,運行哪個文件以查看它是否正常工作。我想要做的是編寫一個程序,保存到文件中,以創建機器代碼的方式調用gcc/g ++,但直接將其加載到內存中運行。所以一旦我對程序輸出感到滿意,我可以再次調用gcc/g ++(如通常那樣)在磁盤上創建可執行文件。

+2

是的,沒有磁盤的系統一直在做它 – 2014-09-04 10:07:13

+0

我想知道那麼在磁盤系統上如何做到這一點。 – Prithviraj 2014-09-04 10:09:50

+0

使用RAM磁盤。 FWIW,這個問題與編程或C/C++無關,屬於不同的站點。當然,你也可能會驚喜地發現現代系統有一些被稱爲磁盤緩存的東西。無論如何,C/C++編譯通常都是CPU綁定的。 – 2014-09-04 10:12:48

回答

1

您可以使用gcc -pipe來避免一些臨時文件。你可以通過gcc -xc -將源代碼傳入GCC。你甚至可以有GCC其輸出寫入stdout:

echo 'int main() {}' | gcc -xc - -S -o - 

一旦你完成了這一切,你留下了幾個問題:從哪裏獲得GCC(!通常是在磁盤上),以及在哪裏獲取你需要的#include和庫文件(同上)。您可以將GCC(它帶有一個標準庫)安裝到RAM磁盤上(查看/dev/shm),但是這真的是你想要完成的嗎?

你不會加快編譯速度。海灣合作委員會文件對-pipe的說法很多。如果您希望更快地編譯,改進源代碼,實施並行編譯系統(make -j),和/或使用更快的鏈接器,例如Gold,而不是傳統的BFD。

0

是的,你可以。一個簡單的方法是使用tmpfs。