主题:动态数组不能彻底释放吗
imhoy
[专家分:0] 发布于 2011-05-15 11:39:00
求教,在使用指针动态数组时,子程序有循环,在不断创建和释放(deallocate)一个指针动态数组,用任务管理器监控内存使用情况,内存一直在缓慢增加,释放时并没有出现内存使用减少的情况。
是因为deallocate命令不能彻底释放吗?仅指针悬空呢,地址还不可读?我怎样才能在循环中保持稳定的内存使用?而且我感觉同样的内容,动态数组占用的内存远大于静态数组。
有人说,fortran在指针和动态数组上做的还不够好,是这样吗?
回复列表 (共4个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-05-16 08:31:00
动态数组有一个头,如果你有很多动态数组,那结果将是得不偿失。因为FORTRAN的动态数组必须保存SHAPE信息,而C则不用。
如果你确定调用了Deallocate,那我很明确的告诉你,内存确实被释放了。至于为何没变小,那应该是系统还未回收而已。因为它“发现”你要不停的申请。
板凳
臭石头雪球 [专家分:23030] 发布于 2011-05-16 15:46:00
Windows 的内存调配远比你想象的复杂。这已经跟Fortran无关了。
3 楼
dongyuanxun [专家分:7180] 发布于 2011-05-16 15:50:00
windows说,你小子想骗我,我也骗你……
4 楼
臭石头雪球 [专家分:23030] 发布于 2011-05-16 21:36:00
话说 Windows 任务管理器那个内存占用确实不准。
话说 windows 平坦内存映射模式确实不好统计内存占用,否则占用的资源就得不偿失了。
我来回复