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/cn.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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP