请教关于内存释放的问题
对内存管理,我始终很不严谨,所以想请教大家。
我平时注意的是malloc用free,new用delete,除了这些我有些问题:
1。全局变量和静态变量用不用自己释放?
2。函数里的句柄,指针,结构体等用不用自己释放?
3。能不能做到运行完我的程序,再退出,内存和程序启动前一样,没有内存损失?
[解决办法]
我记得在栈上分配的不用自己释放,在堆上分配的需要自己free或delete的。
还有不管你的程序又没有内存泄漏之类的问题,只要程序退出了,一般的系统都回把内存完全收回的。
[解决办法]
同意 atAtCola() 的说法
我想关于内存管理所出现的问题应该有内存损坏和内存泄露。
内存损坏指的是指针指向了非法的地址,等到dereference指针时就会出错,等等。
内存泄露应该是发生在运行时(runtime)的动态内存管理中,使用了malloc()就必须在内存块使用完毕时调用free()。而你所说的全局变量、静态变量等等,这些是你在程序中定义的,通常在编译时就已经确定好了存储空间和位置了,运行之后就不用我们操心了。
所以我想问题1和2,我们应用软件编写者不用操心了。
问题3,一般来说,程序结束运行,操作系统就会把程序占用的空间(包括内存泄露的)收回(这是自动进行的),这是系统的工作,也与我们无关。所以理论上应该没有内存损失,但是不排除程序运行期间发生了系统调用,而系统调用那边发生了内存泄露,这就麻烦了,系统早晚崩溃,但这也不是我们的责任,出现此错误的概率也不大。
这是我个人的一点看法,请大家也提提意见。
[解决办法]
> > 函数里的句柄,指针,结构体等用不用自己释放?
动态申请的就释放。
[解决办法]
自己用malloc和new分配的内存得自己用相应的free和delete释放,一般对每个malloc(或new)都得有一个free(或delete)与之对应。