[问题] free()和delete的问题

楼主: d630200x (DOGE)   2019-09-13 16:02:06
在动态配置内存时,C用malloc(),C++用new
而不管是在网络还是书籍上,都会强调必须在生命周期结束后将内存归还回去
那么如果是在程式crash或是我们手动将程式结束掉的情况下
这些动态配置的内存是os回收掉还是C&C++做回收?
作者: sweetmiki (只有初音 没有未来)   2018-09-07 19:42:00
给你的鸡鸡一双翅膀 跨国界尻枪
作者: qqq3892005 (ShinyaS)   2018-09-07 19:48:00
鸡翅→G翅→G WING→GG WIN→GG double IN→GGININ
作者: b0920075 (Void)   2019-09-13 17:45:00
os
作者: Schottky (顺风相送)   2019-09-13 20:17:00
Crash 由 OS 收尸,手动结束有可能程式自己会处理后事当然程式如果没有处理/来不及处理还是 OS 会收拾残局具体的说就是用 atexit() 设定“办后事”的 functionGUI 程式也可以设定按 X 或被 OS 通知结束时的行为那有没有不会收尸的OS?有啊,程式crach就整台电脑当机
作者: EricTCartman (阿ㄆㄧㄚˇ)   2019-09-13 20:34:00
不当机还是会有OS不帮忙收拾的状况 有些OS就是没做
作者: stupid0319 (征女友)   2019-09-13 22:40:00
windows在O3层虚拟内存寻址的话,OS直接就收掉如果是写驱动程式的话,就要很小心了
作者: ando5566 (风云变色)   2019-09-14 12:23:00
回答问题:由程式回收
作者: cphe (魔鬼藏在垃圾筒里)   2019-09-15 18:51:00
OS会收,通常会考虑leak的状况是,很多程式其实是一直在背景跑不会结束,如果不free就会一直吃memory ,直到被terminate
作者: arshuan (阿轩)   2019-11-17 14:18:00
你一般user space的程式在执行就是OS allocate 一块内存给你 你不管怎么用不管静态或动态配置都不可能超出那块, 程式关闭后OS自然把整块内存回收 所以不用担心会有任何memory leak影响到整个系统我上面讲的可能不太对 应该说你程式跟OS要过多少内存OS都有纪录 所以程式关闭时OS一定会把所有配给该程式的内存收回 但是如果你程式没关闭又一直要内存 OS当然不会去回收 才会导致所谓的memory leak

Links booklink

Contact Us: admin [ a t ] ucptt.com