动态分配的内存释放问题
最近看到了一些帖子对malloc和new等函数分配的内存在程序结束后是否会自对释放内存进行讨论。有几点想请教下:
1、这些函数分配的内存在整个程序退出后动态分配的内存是否会被系统自动回收?
2、如果自动回收跟语言的回收机制有关系还是跟操作系统的回收机制有关系?
3、哪些语言或平台会在对内存进行监管在程序退出时主动回收内存?
虽然malloc与free配对出现是个良好的习惯,不过我还是想详细地了解下动态内存回收这方面的知识,希望有牛人能解答一下上面的几个问题。
[解决办法]
程序结素后,系统会释放进程.进程内所有资源都被释放.所以内存也被回收.
语言的回收机制,如JAVA等,是在该资源用完后自动回收,并不一定是在程序结束后.
[解决办法]
1、这个两个函数分配的都是在堆中分配的空间,要程序自己释放的,操作系统不会回收的。
2、这个问题,我感觉跟操作系统也是有些关系,linux的exit函数直接异常退出就不用清理内存的;另外跟平台有些关系,基于CLR语言标准平台如java、.NET等会自己回收的。
3、同2答案。
[解决办法]
[解决办法]
1、这些函数分配的内存在整个程序退出后动态分配的内存是否会被系统自动回收?
会 可以通过程序申请一块空间,记下地址,不加free,运行后关闭在运行时,这块空间会再次被分配
2、如果自动回收跟语言的回收机制有关系还是跟操作系统的回收机制有关系?
跟操作系统 c语言可定是没有回收机制的
3、哪些语言或平台会在对内存进行监管在程序退出时主动回收内存
JAVAJAVA的垃圾回收器会自动回收,所以java中new后无需做delete之类的操作,实际上,java是存面向对象的语言,除了主类,其他的对象都要new的,所以语言自带回收内存机制。