我們可以在不需要磁盤訪問的情況下完全在內存中編譯和運行C/C++程序嗎?編譯並運行內存中的c/C++程序
通常在編輯器中編寫C/C++程序,保存到磁盤(在文件中),然後編譯它。編譯在磁盤上創建可執行文件,運行哪個文件以查看它是否正常工作。我想要做的是編寫一個程序,保存到文件中,以創建機器代碼的方式調用gcc/g ++,但直接將其加載到內存中運行。所以一旦我對程序輸出感到滿意,我可以再次調用gcc/g ++(如通常那樣)在磁盤上創建可執行文件。
我們可以在不需要磁盤訪問的情況下完全在內存中編譯和運行C/C++程序嗎?編譯並運行內存中的c/C++程序
通常在編輯器中編寫C/C++程序,保存到磁盤(在文件中),然後編譯它。編譯在磁盤上創建可執行文件,運行哪個文件以查看它是否正常工作。我想要做的是編寫一個程序,保存到文件中,以創建機器代碼的方式調用gcc/g ++,但直接將其加載到內存中運行。所以一旦我對程序輸出感到滿意,我可以再次調用gcc/g ++(如通常那樣)在磁盤上創建可執行文件。
您可以使用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。
是的,你可以。一個簡單的方法是使用tmpfs。
是的,沒有磁盤的系統一直在做它 – 2014-09-04 10:07:13
我想知道那麼在磁盤系統上如何做到這一點。 – Prithviraj 2014-09-04 10:09:50
使用RAM磁盤。 FWIW,這個問題與編程或C/C++無關,屬於不同的站點。當然,你也可能會驚喜地發現現代系統有一些被稱爲磁盤緩存的東西。無論如何,C/C++編譯通常都是CPU綁定的。 – 2014-09-04 10:12:48