2017-02-27 206 views
1

當我們聲明任何變量時,特別是在C/C++中,它會根據其數據類型(也是機器)在計算機內存中分配。我的問題是,當我們在在線IDE中運行程序時,我的PC /機器的內存是否被使用?在線編譯器對計算機內存的影響

這個問題是更多的使用C動態分配內存此事的意思,因爲,無論出於何種原因,如果我們濫用在像malloc()calloc()功能,特別是free()參數的指針,有可能是電腦的內存被損壞在一定程度上(內存泄漏)。因此,如果在線編譯不使用計算機內存,那麼我可以在聯機IDE上使用這些函數,但我不知道是什麼情況。它安全嗎?

+0

即使您在本地運行該程序,計算機的內存也不會受到「損害」。內存泄漏只是意味着,如果你調用'malloc' *很多'free',那麼調用最終會失敗。就這樣。一旦程序終止,操作系統會重新整理並釋放程序正在使用的所有內存。 –

+0

這是C的摘錄:Schildt的完整引用。 'free()'函數將ptr指向的內存返回給堆。這使內存可供未來分配。 必須使用先前使用動態分配系統函數之一分配的指針調用free()。在調用中使用無效指針很可能會破壞內存管理機制,並可能導致系統崩潰。如果你傳遞一個空指針,'free()'不執行任何操作。 – Buddhist

+1

是的,但如果你運行任何現代操作系統,如Linux或Windows或OSX,整個堆在虛擬內存中,當程序終止時會回收它。每個程序都有自己的堆,不會對彼此造成任何損害。 –

回答

8

由於一切運行在遠程機器上,您的本地PC將不會受到那裏發生的任何事情的影響。

+0

我也從我的教授那裏聽說過,你不應該使用與記憶相關的在線內容,它總是被誤認爲是錯誤的。這是真的 ?雖然,直到現在,我還沒有經歷過關於指針的任何編譯錯誤。 – Buddhist

+1

任何失敗的東西都會在遠程機器上失敗。包括內存損壞。影響本地計算機的唯一方法是在瀏覽器中使用「零日」漏洞。 –

3

在線編譯器不能訪問您計算機的本地內存;所有的運行過程都在遠程機器上進行。因此,即使使用malloc()calloc()或甚至free()等功能,計算機也不受在線編譯器的影響。

例如,Ideone是一種流行的在線編譯器,它在Sphere Engine所擁有的遠程服務器上運行提交的代碼。內存分配,編譯,運行等等都發生在該服務器上。其他在線編譯器使用類似的服務。

請注意,如上所述;如果編譯器滯後,或者如果你的代碼有問題(就像它進入了一個無意的無限循環),那麼你的瀏覽器可能會遇到延遲或者可能會掛起(就像我的情況那樣)。但這與您的計算機內存無關,因爲只有打開的瀏覽器受到影響,其他所有內容才能正常工作。這種滯後發生的原因是由於遠程服務器上的某些問題,由於代碼錯誤或處理速度較慢等原因而出現滯後現象。此外,您的Internet速度可能較慢,這可能會導致一些滯後。但是,再說一遍,這與本機的本地內存無關。

這最後一段是對主要問題的附加說明。

+1

感謝您的額外注意。 – Buddhist

2

它們通常是Web服務。他們收到程序並編譯,鏈接並在沙箱中(服務器上)運行它,並僅將輸出返回給最終用戶。雖然我不能評論所有這些,但這是典型的行爲。所以一般來說,他們是安全的,他們不使用你的計算機內存來運行代碼。

+0

我也從我的教授那裏聽說過,你不應該使用與記憶相關的在線內容,它總是被誤認爲是錯誤的。這是真的 ?雖然,直到現在,我還沒有經歷過關於指針的任何編譯錯誤。 – Buddhist

+0

在我的想法中,它實際上是一個開始學習編碼的好地方。因爲你不會破壞你自己的計算機的內存,這是新程序員試圖用C語言操作指針的典型例子。也許你的教授想指出的是,你沒有選擇大小的權力你正在運行你的代碼的沙箱內存(如果你分配大內存)或其他性能相關的規格。 – Arash

+0

@arash你可能在你和系統內存之間有更多層次的抽象。在C語言中,它已經非常抽象了(至於我們沒有指針的真實地址,中間有一個映射器可以將它映射到虛擬內存),但在一個在線編譯器中,您可能會有更多的抽象你困惑。 –