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