C_and_CPP 板


LINE

※ 引述《youtuuube000 (小孩)》之銘言: : 開發平台(Platform): (Ex: Win10, Linux, ...) : linux : 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) : GCC : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 無吧(? : 問題(Question): : 各位好 : 我想要問一下 : 若在一般function宣告變數的話(e.q. int a=0;) : 我知道隨著function結束執行return後 變數的記憶體也就會被釋放了 這是因為function被呼叫時,這些變數會被push到stack裡 而return後,則會被pop出來,也就是你所說的被釋放 : 但若是在main裡面宣告的話 : 此變數不就會一直保留著他的記憶體 : 而要等到程式結束後他才會被清空嗎? 是的,這是因為main本身也是一個function 只是他是第一個被呼叫的function 所以他最後才被pop,也就是你所說的程式結束 這是stack的特性,先進後出 : 但為什麼一般都沒有設計清空在main裡面宣告變數記憶體的機制呢? 會清空啊 同上所述,因為main是function,當他被return時 所有宣告的變數就會被pop出來 : 但malloc卻一定要強調要用free來清空呢? : malloc宣告的變數不也會隨著程式結束後就被清空了嗎? : 為什麼要強調一定要用free呢? 不是喔,malloc的變數不會隨著程式結束被清掉 如果沒有free掉,他會一直佔著記憶體,直到你重開機 而malloc的變數存放的地方稱作heap 建議你找本資料結構的書,看一下什麼是stack跟heap 就會有概念了 : 我知道在其他function定義的malloc一定要用free不然會有memory leak : 但在main裡面宣告的malloc的變數都要強調要用free : 為什麼int a=0;在main裡面卻不用釋放記憶體呢? : 先謝謝回答了 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.14.150.219
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1478932608.A.7E1.html ※ 編輯: LoserOfLove (101.14.150.219), 11/12/2016 14:39:24 ※ 編輯: LoserOfLove (101.14.150.219), 11/12/2016 14:44:16
1F:→ CoNsTaR: .. 11/12 14:51
2F:→ stupid0319: 最後一段怎麼怪怪的,Ring3下應該是隨著程式結束清掉 11/12 14:56
3F:→ stupid0319: Ring0的話好像是會一直佔著記憶體 11/12 14:57
4F:→ stupid0319: 不過寫ring0的程式大概不會通過簡單的malloc來申請 11/12 14:59
5F:→ LoserOfLove: 沒錯,感謝s大的補充 11/12 15:25
6F:→ LoserOfLove: 針對原po最後一段的疑問,我看看以下這樣解釋o不ok 11/12 15:47
7F:→ LoserOfLove: 假設如果在main裡有一個無窮迴圈 不斷的在等事件發生 11/12 15:47
8F:→ LoserOfLove: 而事件發生時,我們會用malloc配置記憶體空間 11/12 15:47
9F:→ LoserOfLove: 當時間越來越長,malloc的空間越來越多 11/12 15:47
10F:→ LoserOfLove: 但卻沒有對應的free來釋放空間,最後空間就耗光了 11/12 15:47
11F:→ LoserOfLove: 因此就算是main裡使用malloc,還是必須要free 11/12 15:48
12F:→ LoserOfLove: 而int a=0是不會一直被配置空間的 11/12 15:48
13F:推 Ommm5566: 不是資料結構吧? heap和stack是系統的 11/13 07:04
14F:→ Ommm5566: 資結的heap stack意義完全不一樣 11/13 07:04
15F:→ hunandy14: 一直很好奇沒有free掉的記憶體,系統不會接管釋放嗎~ 11/13 19:32
16F:→ hunandy14: 換個說法~windwos會允許沒寫好的程式浪費空間嗎~ 11/13 19:37
17F:推 s25g5d4: 為什麼要強調 windows...正常來說系統是會在程式結束 11/13 20:00
18F:→ s25g5d4: 後釋放掉的 但是程式還在執行中就不會去動它 11/13 20:00
19F:→ hunandy14: 也不一定是win啦~linux MAC也好 11/13 20:20
20F:→ hunandy14: 記得好像聽老師說過,就算沒free() 系統也會接管釋放 11/13 20:21
21F:→ hunandy14: 不過沒 free() 挖坑給自己跳很容易出找不到的bug 11/13 20:22
22F:推 final01: 你的觀念很有問題... 11/14 00:39
23F:推 Raymond0710: 自己國家自己救...自己生的記憶體自己清 11/14 12:44
24F:噓 Sidney0503: 最後一段全錯.... 11/14 15:20
25F:→ hunandy14: 了解。也不是很確定,片段聽過 11/14 15:57
26F:→ hunandy14: 最後那段也是先前看過的,給的自己挖了坑QQ 11/14 15:58
27F:推 redmilk: malloc的變數在程式結束時是否歸還 要看OS的行為 11/14 17:32
28F:→ redmilk: 如果OS不幫你處理 那麼就不會歸還 11/14 17:32
29F:→ hunandy14: 好的~ 11/14 18:19
30F:→ LoserOfLove: 抱歉喔,最後一段的確錯了,process起來時,配置的空 11/14 22:29
31F:→ LoserOfLove: 間包含stack跟heap,還有一些其他的global空間等等 11/14 22:29
32F:→ LoserOfLove: 所以當process結束後,heap也會釋放掉 11/14 22:30
33F:→ LoserOfLove: 不過我不懂Ommm5566大說的系統跟資料結構的stack跟 11/14 22:30
34F:→ LoserOfLove: heap是不同的,應該是一樣的東西啊 11/14 22:31
35F:推 final01: OS裏面有heap,stack 資結也有heap,stack的確是再講不同的 11/14 22:39
36F:→ final01: 事沒錯~我覺得你可能OS比較不熟?可以去瞭解一下OS的 11/14 22:41
37F:→ final01: heap,stack定義跟實際用法,只看書還不夠 11/14 22:42
38F:→ LoserOfLove: os的heap跟stack是資料放在記憶體的資料結構啊? 11/14 22:59
39F:→ LoserOfLove: 就是用資料結構講的概念的實作 11/14 22:59
40F:→ LoserOfLove: 所以呼叫function時,會push進stack 11/14 23:00
41F:→ LoserOfLove: return時,會pop出來結果 11/14 23:01
42F:噓 Sidney0503: 此heap非彼heap 11/15 06:57
43F:→ Sidney0503: 只是名稱一樣 11/15 06:58
44F:→ Sidney0503: 我mallo每次空間都不一樣 你heap sort給我看 11/15 06:58
45F:推 ronin728: main 函數不一定是第一個被呼叫的函數... 11/15 09:21
46F:推 ronin728: 建議你去讀一下OS的書,通常都是在 virtual address spa 11/15 09:39
47F:→ ronin728: ce 弄出 page,然後用特定的演算法管理,例如 Linux 的 11/15 09:40
48F:→ ronin728: Buddy、Slab 演算法,Buddy 演算法確實有一點DS的 Heap 11/15 09:40
49F:→ ronin728: 的感覺,但只用 free list 線性找到底... 其實也叫 heap 11/15 09:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP