[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
HDF files and memory leak
- Subject: HDF files and memory leak
- From: Jacques <jfb37(at)NOSPAM.cam.ac.uk>
- Date: Fri, 10 Aug 2001 12:08:01 +0100
- Newsgroups: comp.lang.idl-pvwave
- Organization: University of Cambridge, England
- User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:26135
Hi all
I am trying to find out how to stop a memory leak when reading HDF files.
Here is a chunk of the code where I restore a template, and free up the
memory that it uses, and all is fine.
------------------------------------------------------------------
IDL Version 5.4 (linux x86). (c) 2000, Research Systems, Inc.
IDL> help, /heap
Heap Variables:
# Pointer: 0
# Object : 0
IDL> file = 'hdfaa.000'
IDL> restore, 'energy.template'
IDL> help, /heap
Heap Variables:
# Pointer: 55
# Object : 0
<PtrHeapVar1> STRUCT = -> <Anonymous> Array[1]
<PtrHeapVar2> LONG = 63
....
IDL> ptr_free, template.sd.sds.attributes
IDL> ptr_free, template.sd.sds.dims
IDL> ptr_free, template.sd.sds.dim_info
IDL> help, /heap
Heap Variables:
# Pointer: 0
# Object : 0
IDL>
------------------------------------------------------------------
However, when I actually read data from an HDF file...
------------------------------------------------------------------
IDL Version 5.4 (linux x86). (c) 2000, Research Systems, Inc.
IDL> help, /heap
Heap Variables:
# Pointer: 0
# Object : 0
IDL> file = 'hdfaa.000'
IDL> restore, 'energy.template'
IDL> help, /heap
Heap Variables:
# Pointer: 55
# Object : 0
<PtrHeapVar1> STRUCT = -> <Anonymous> Array[1]
<PtrHeapVar2> LONG = 63
...
IDL> temp = hdf_read(file, template=template)
% Restored file: HDF_READ.
% Restored file: HDF_MAP.
% Compiled module: REVERSE.
% Loaded DLM: HDF.
IDL> help, /heap
Heap Variables:
# Pointer: 165
# Object : 0
<PtrHeapVar1> STRUCT = -> <Anonymous> Array[1]
<PtrHeapVar2> LONG = 63
...
IDL> ptr_free, template.sd.sds.attributes
IDL> ptr_free, template.sd.sds.dims
IDL> ptr_free, template.sd.sds.dim_info
IDL> help, /heap
Heap Variables:
# Pointer: 110
# Object : 0
<PtrHeapVar56> STRUCT = -> <Anonymous> Array[1]
<PtrHeapVar57> LONG = 63
...
IDL> help, temp, /structure
** Structure <81ec2fc>, 4 tags, length=1000212, refs=1:
FILENAME STRING 'hdfaa.000'
VERSION STRING '1.1'
DATE STRING 'Fri Jul 27 09:42:22 2001'
_HDFAA_SD_19
FLOAT = Array[63, 63, 63]
------------------------------------------------------------------
So hdf_read takes up a chunk of the heap, and there are no pointers in
the variable "temp".
The HDF_BROWSER online help states:
"The user is required to clean up the heap variable references when done
with them."
So I try to run
IDL> heap_gc
IDL> help, /heap
Heap Variables:
# Pointer: 0
# Object : 0
So that seems fine, but the problem is that the memory is not freed up
and after a couple of hours (and reading hundreds of HDF files) the
memory usage (as reported by top) is up to 220MB. Nothing can free up
the memory (I've tried heap_gc and .full_reset_session).
Can anyone tell me what I need to do to free up this memory?
Thanks,
Jacques