簡體   English   中英

在C / C ++中,通過int main()返回0,在任何操作系統上,都會清除程序在任何(RAM,緩存或任何......)內存中使用的所有資源嗎?

[英]Does return 0 by int main() in C/C++, on any OS, clears off all the resources used by the program in any(RAM, cache or any…) memory?

我屬於一所新設立的大學,並且擁有不那么有才華的老師。 我個人已經發現他們犯了很多次錯誤。 這是因為他們自己有錯誤的知識。 因此,我教自己編程和網絡。 因為我不能依賴它們。

現在,由於這是一個場景,我已經陷入了一個大疑問。

我的一個主題是算法分析,曾說過,“當int main()返回0時,所有緩沖區都被關閉,所有使用的資源都被清除,並且為其他程序創建了空間。因此它是一個好的練習返回0“。 我認為,“媽媽,我們總是知道這只是表明該計划已經成功完成了”,她說,“你是部分正確的”。

這顯然意味着她意味着返回非零不釋放資源。

現在誰是對的,我或她? 我應該要錢嗎?

main返回的值將提供給操作系統。 C或C ++標准中沒有任何內容表明基於該值發生了不同的事情。

你的老師100%錯了。

你做對了。
你應該要求退款。

麻省理工學院有很好的在線課程 ,更准確。

main函數返回打開文件時,將關閉並刷新輸出流。 C不指定是否釋放malloc分配的malloc

我們可以從兩個層面思考這個問題。

  1. 當C / C ++結束時(返回代碼)會發生什么
  2. C / C ++結束后會發生什么(以及操作系統如何處理資源和返回代碼)。

對於1),C / C ++不進行任何資源管理,它只是將返回代碼提供給OS,而不管0或不同的值。

我能想到的一個例外是復雜的庫資源(例如流),它們可以在超出范圍時被破壞......並且可以具有與之關聯的資源清理行為(例如,包含在ofstream中的filebuf將在析構函數中關閉文件) )

但以上情況將視具體情況而定。

對於2)......簡單的答案只取決於操作系統。 典型的主流操作系統將在程序之后處理資源清理。 邊緣操作系統(例如嵌入式系統)可能不會....甚至在maintream操作系統的情況下,不同的資源將得到不同的處理或需要更多的時間來恢復(找到: 操作系統;資源自動清理(對於Windows)答案到什么時候C ++終止處理程序是Right Thing(TM)?

最后操作系統對返回值的作用再次取決於操作系統,我懷疑資源處理會隨着不同的返回值而改變......但誰知道特定情況。

從上面的答案得出的最終結論......操作系統完成了它的編程工作。 返回任何整數只意味着程序已終止的操作系統,沒有別的。 如果OS成功終止或失敗,操作系統並不在意。 當我們從main()返回任何整數時,整數只是操作系統的垃圾。 無論你返回0或-556還是任何整數。 操作系統的一切都是一樣的。 操作系統不清除任何資源。 事實上,當涉及到C / C ++時,程序員有責任清除資源。 操作系統什么都不做。 我們返回0只是因為它是一個標准的對流。

暫無
暫無

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

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