C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) linux 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) GCC 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 无吧(? 问题(Question): 各位好 我想要问一下 若在一般function宣告变数的话(e.q. int a=0;) 我知道随着function结束执行return後 变数的记忆体也就会被释放了 但若是在main里面宣告的话 此变数不就会一直保留着他的记忆体 而要等到程式结束後他才会被清空吗? 但为什麽一般都没有设计清空在main里面宣告变数记忆体的机制呢? 但malloc却一定要强调要用free来清空呢? malloc宣告的变数不也会随着程式结束後就被清空了吗? 为什麽要强调一定要用free呢? 我知道在其他function定义的malloc一定要用free不然会有memory leak 但在main里面宣告的malloc的变数都要强调要用free 为什麽int a=0;在main里面却不用释放记忆体呢? 先谢谢回答了 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.233.115.107
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1478860252.A.6B3.html
1F:→ MOONRAKER: 因为他们放的记忆体区段不一样 11/11 18:34
2F:→ MOONRAKER: 我也很好奇为何我租车一定要还给别人 而骑我自己的车却 11/11 18:37
3F:→ MOONRAKER: 不用还给自己 这很不对等不是吗 11/11 18:37
4F:→ youtuuube000: 请问Malloc是放在heap 一般变数放在哪呢? 11/11 18:39
5F:→ youtuuube000: 为什麽放在heap要释放记忆体但一般变数的地方却不用 11/11 18:40
6F:→ youtuuube000: 呢? 11/11 18:40
7F:推 CoNsTaR: 因为一般变数用到的大小在编译时期就决定了 11/11 18:41
8F:→ CoNsTaR: 你自己 alloc 的空间是 runtime 才决定 所以也要 runtime 11/11 18:41
9F:→ CoNsTaR: 决定如何释放 11/11 18:41
10F:→ CoNsTaR: 其实有些语言你自己 alloc 的空间也可以在编译时期决定如 11/11 18:43
不好意思在请问一下@@ 为什麽会在runtime才决定如何释放呢? 我知道malloc是在runtime才分配记忆体给他 且int a=0;跟malloc在main里面都一样占有记忆体 但为何不用在意int a=0;所占的记忆体空间 而malloc会一定要强调用free呢? 不是程式结束後就自动free掉此程式所用的记忆体空间了吗?
11F:→ CoNsTaR: 何释放 11/11 18:43
12F:→ pttworld: 有个网站是stack overflow 11/11 18:43
我知道有那网站 只是英文不好不知道关建字怎麽下 试了好几次都查不到我想找的答案才来这里发问 但我并不是完全没想过直接问问问题的 若这样还不能在这发问不是很奇怪吗?
13F:→ CoNsTaR: 不需要消化 runtime 的执行成本 像是 Rust 的 Ownership 11/11 18:44
※ 编辑: youtuuube000 (36.233.115.107), 11/11/2016 19:23:03
14F:推 CoNsTaR: 就像有时候你会想要用阵列,用 index 来决定操作哪个变 11/11 19:35
15F:→ CoNsTaR: 数 11/11 19:35
16F:→ CoNsTaR: 这是「程式化」的操作变数,只不过你现在的 case 变成程 11/11 19:35
17F:→ CoNsTaR: 式化的分配记忆体而已 11/11 19:35
18F:→ CoNsTaR: 你有一个规则,用来分配/释放记忆体的规则,或是操作变 11/11 19:37
19F:→ CoNsTaR: 数的规则,而不直接写死在程式里,可以在 runtime 按照规 11/11 19:37
20F:→ CoNsTaR: 则做 11/11 19:37
21F:→ CoNsTaR: 至於 Rust 就是已经把规则定好在语言里面了,达成程式设 11/11 19:39
22F:→ CoNsTaR: 计师和编译器之间的共识 11/11 19:39
23F:→ pttworld: 刻意断字的明显提示怎麽。关键字:stack and heap 11/11 19:40
24F:推 CoNsTaR: 这样说好了 变数不用(或说 life time 结束比较精确)的时 11/11 19:52
25F:→ CoNsTaR: 候就该被释放 11/11 19:52
26F:→ CoNsTaR: 这是语言的规定,让你不用多考虑哪个变数该在哪释放 11/11 19:52
27F:→ CoNsTaR: 当然也有一个让你自己决定如何释放的机制,那就是 malloc 11/11 19:52
我大概懂了 谢谢你! ※ 编辑: youtuuube000 (36.233.115.107), 11/11/2016 20:00:59
28F:→ james732: 其实也不应该在main里放一堆变数XD 11/11 20:29
29F:推 Bencrie: gcc -S 去看输出的组语应该会有帮助 11/12 01:54
30F:→ MOONRAKER: 你有想过你的变数要在runtime的什麽时候释放吗 11/12 04:54
31F:→ MOONRAKER: 没有 因为你只想到你自己 11/12 04:54
32F:→ MOONRAKER: 你没有想过或你想不到 不表示这个设计没有意义 11/12 04:55
33F:推 b0920075: pttworld大大把stack overflow分超开就是提醒你跟stack 11/12 16:10
34F:→ b0920075: 有关吧XDDDD 11/12 16:10
35F:→ Ommm5566: 原理跟C大说得不太一样=.= 11/13 07:05
36F:推 ronin728: 作业系统不帮你做 garbage collection,可能是因为在OS 11/15 10:07
37F:→ ronin728: 层级做GC效果很差。没GC的情况下,你不 free ,那麽OS怎 11/15 10:07
38F:→ ronin728: 麽知道你用的哪块记忆体有还回来? 自己的垃圾自己清 11/15 10:07







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

请输入看板名称,例如:e-shopping站内搜寻

TOP